๋ค์ด๊ฐ๋ฉฐ
์ํฌ์คํ
์ด์
์ฑ๋ฅ์ ๊ดด๋ฌผ๊ฐ์๋ฐ ํ ์ผ ์์ด ๋๊ณ ๋ง ์๋ค.
๋ณ๋ ฌ์ฒ๋ฆฌ๋ก ๋นก์ธ๊ฒ ๊ตด๋ ค๋ณด์.
์ด๋๋ค.
(ํ์ง๋ง ๋ด ์ฝ๋๊ฐ ๋ฉํฐ์ฝ์ด ์ฌ์ฉ์ผ๋ก๋ ํด๊ฒฐ๋์ง ์์ ์ข
๋ฅ์ผ ์ ์๋ค.)
ํ ํ๋ฆฟ
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ
|
|
foreach
๋ฅผ ๋ถ๋ฌ์ค์ง ์๊ณ foreach::foreach
๋ฅผ ์ํํ๋ฉด
%dopar% ํจ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํด๋ฌ์คํฐ ์ ์ : ํํฐ ๋ชจ์ง
๊ฒ์์์ ๋ ์ด๋ ๋ธ ํํฐ๋ฅผ ๊ตฌ์ฑํ๋ ์์ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. (= ์ผ ํ ์ฝ์ด ๊ตฌ์ฑ)
|
|
๋ช ๋ช
๋ชจ์งํ ๊ฒ์ธ์ง ์ ํ๋ค. parallel::detectCores()
๋ ๊ฐ์ฉ ์ต๋ ์ฝ์ด ์๋ฅผ ์๋ ค์ค๋ค.
๋ง์ฐ์ค ์์ง์ด๋ ๋ฑ์ ๊ธฐ๋ณธ ์์
์ ํด์ผ ํ๋ 1๊ฐ ๋นผ์ค๋ค.
|
|
parallel::makeCluster(ํํฐํฌ๊ธฐ)
๋ก ํํฐ(ํด๋ฌ์คํฐ)๋ฅผ ๋ง๋ค๊ณ ,
doParallel::registerDoParallel(ํํฐ์ด๋ฆ)
์ผ๋ก ๋ฑ๋กํ์(์ ๋ฑ๋ก์ด ํ์ํ ๊น).
์ ํํ ๊ธฐ๋ฅ์ ๋งค๋ด์ผ์ ์ฐธ๊ณ ํ์.
๋ณ์ ํ ๋น: ์์ดํ ์ ๊ฒ
๋ ์ด๋ ๋ฐ๊ธฐ ์ ์ ์ฅ๋น ๋ด๊ตฌ๋, ์๋ชจํ ๋ฑ ์ ๊ฒํด์ผ ํ๋ค.
๋ณธ๊ฒฉ์ ์ธ ๋ณ๋ ฌ์ฒ๋ฆฌ ์ํ ์ ์๋ ํ์ํ ๋ณ์๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค.
foreach
์ธ๋ถ์์ ์ ์ํ ๋ณ์๋ foreach
๋ด๋ถ์์ ์ฌ์ฉํ์ง ๋ชป ํ๋ค๊ณ ํ๋ค(์ฐธ๊ณ ).
|
|
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ foreach
์ํํ๋ฉด์ ์ฝ์ด๋ค์ผ ์ ์๋ค.
๋ณ๋ ฌ์ฒ๋ฆฌ: ๋ ์ด๋
|
|
๊ธฐ๋ณธ์ ์ธ for
๊ตฌ๋ฌธ๊ณผ ๋น์ทํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
- ์นด์ดํฐ์ ๋ฒ์ ์ค์ ํ๋ค.
.combine
:foreach
์์๋ ์ฌ๋ฌ ์ฝ์ด๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ฝ๋๋ฅผ ์ํํ๋ค.
.combine
์ ์ด์ฉํด ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ทจํฉํ๋ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ค.- list: ๊ธฐ๋ณธ๊ฐ. ๋ฆฌ์คํธ ํํ๋ก ์ด์ด ๋ถ์ธ๋ค.
- c: ๋ฒกํฐ ํํ๋ก ์ด์ด ๋ถ์ธ๋ค.
- rbind: ์ธ๋ก๋ก ์ด์ด ๋ถ์ฌ ๋ฐ์ดํฐํ๋ ์์ ๋ง๋ ๋ค.
- cbind: ๊ฐ๋ก๋ก ์ด์ด ๋ถ์ฌ ๋ฐ์ดํฐํ๋ ์์ ๋ง๋ ๋ค.
- ๋ฑ๋ฑ
- `.packages”: ํ์ํ ํจํค์ง๋ฅผ ์ฑ๊ฒจ๊ฐ๋ค.
.inorder
: ์ทจํฉํ ๋ ์๋ ์์(i=1, 2, 3, …)๋ฅผ ์ ์งํ๊ณ ์ถ๋ค๋ฉด TRUE๋ฅผ ์ ํํ๋ค(๊ธฐ๋ณธ๊ฐ).%dopar%
: ๋ฌธ๋ฒ ์์๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.%do%
๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ์ผ์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ๋ค(=for
๊ตฌ๋ฌธ).
ํด๋ฌ์คํฐ ํด์ : ํด์ฐ
๋ณด์์ ์ฑ๊ธด ํ์๋ ์ฟจํ๊ฒ ํด์ฐํ๋ค.
|
|
์ ์ฒด ์ฝ๋
|
|
์๊ฐํด๋ณผ ๊ฒ๋ค
๊ฐ ๋ฐ๋ณต ์์ ์ ์๋ก ๋ ๋ฆฝ์ ์ด์ด์ผ ํ๋ค?
foreach
๋ ๋ฐ๋ณต๋ฌธ์ด ํด์ผ ํ ์์
์ ์ฌ๋ฌ ์ฝ์ด์ ๋๋ ์ ๋น ๋ฅด๊ฒ ์ํํ ํ ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ทจํฉํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
๋๋ฌธ์, ๋ฐ๋ณต ์์
๊ฐ์ ๊ฐ์ญ์ด ์์ด์ผ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ ๊ฒ ๊ฐ๋ค.
์๋ฅผ ๋ค์ด, i=1์ผ๋์ ๊ฒฐ๊ณผ๊ฐ i=2์ผ๋ ์์
์ ์ฌ์ฉ๋ผ์ผ ํ๋๋ฐ,
๋ ์์
์ ์๋ก ๋ค๋ฅธ ์ฝ์ด๊ฐ ์ํํ๊ณ ์๋ค๋ฉด ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์์ ์ ์์ ๊ฒ ๊ฐ๋ค.
๋ณ๋ ฌ์ฒ๋ฆฌ์์
์์
์ด ์ฌ๋ฌ ์ฝ์ด์ ์ด๋ป๊ฒ ๋ถ๋ฐฐ๋๋์ง,
์ฝ์ด ๊ฐ์ ๊ฒฐ๊ณผ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ์ง,
์ฌ๋ฌ ์ฝ์ด๊ฐ ํ ์์
์ ํจ๊ป ๋งก์ ์ ์๋์ง,
์์
๋ด์ฉ์ ๋ง์ถฐ์ ์์์ ์ค๋งํธํ๊ฒ ๋ถ๋ฐฐ๋๋์ง…์ ๊ฐ์ ์๋ฆฌ๋ฅผ ์๋ฉด ๋ ์ดํดํ๊ธฐ ์์ํ ๊ฒ ๊ฐ๋ค.
์ค์ฒฉ ๋ฐ๋ณต๋ฌธ ๊ตฌ์กฐ์ธ ๊ฒฝ์ฐ?
๋ด๊ฐ ์ฒ์ ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ฝ๋๋ ๋๋ต ์๋์ ๊ฐ๋ค.
for(i in 1:csvํ์ผ๊ฐ์){
csv ์ฝ์ด์ ๊ฐ๊ณต
# ๋ณ๋ชฉ ๊ตฌ๊ฐ 1
for(s in 1:๊ด์ธก์ง์ ์){
}
# ๋ณ๋ชฉ ๊ตฌ๊ฐ 2
for(s in 1:๊ด์ธก์ง์ ์){
}
๊ฒฐ๊ณผ ์ทจํฉ ๋ฐ ๊ฐ๊ณต
๊ฒฐ๊ณผ ์ ์ฅ
}
csvํ์ผ ํ๋ํ๋๋ง๋ค ์ผ๋ จ์ ์์
์ํ ํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์์
์ ๋ฐ๋ณตํ๋ ์ฝ๋๋ค.
๋๋ถ๋ถ ์ํ์๊ฐ์ ๋ด๋ถ ๋ฐ๋ณต๋ฌธ์ด ์ฐจ์งํ๋ค.
๊ฐ csv ํฌ๊ธฐ๋ 300MB~2000MB ์ ๋๋ก ๋น๋ํ๊ณ (์ค์๊ฐ 1000MB ์ ๋), ์ด 99๊ฐ๋ค.
๋ด ์ํฌ์คํ
์ด์
์ CPU ์ฝ์ด๋ 32๊ฐ์ด๊ณ ๋จ๋ 256GB๋ก ์ถฉ๋ถํ๋ค.
๋จ์ผ์ฝ์ด๋ฅผ ์ฌ์ฉํ ๋ 1500MB ํ์ผ ์ฒ๋ฆฌํ๋ ๋ฐ 30๋ถ ์ ๋ ๊ฑธ๋ ธ๋ค๊ณ ์๊ฐํ๋ฉด…
๋ณ๋ ฌ์ฒ๋ฆฌํด์ 31์ฝ์ด๋ก ๋๋ฆฌ๋ฉด 31๋ฐฐ๊น์ง๋ ์๋๋๋ผ๋ ๊ธ๋ฐฉ ๋๋๊ฒ ๊ฑฐ๋ ์๊ฐํ์ง๋ง, ์คํ๋ ค ๋ ์ค๋ ๊ฑธ๋ ธ๋ค.
์ ๋ ์ค๋ ๊ฑธ๋ ธ์๊น?: ๋ฌด์์ foreach()
๋ก ๊ฐ์ธ์ง ๋ง๊ธฐ!
์๋๋ ๋ด๊ฐ ์ฒ์ ์๋ํ๋ ์ฝ๋๋ค.
foreach(){
for(i in 1:csvํ์ผ๊ฐ์){
csv ์ฝ์ด์ ๊ฐ๊ณต
# ๋ณ๋ชฉ ๊ตฌ๊ฐ 1
for(s in 1:๊ด์ธก์ง์ ์){
}
# ๋ณ๋ชฉ ๊ตฌ๊ฐ 2
for(s in 1:๊ด์ธก์ง์ ์){
}
๊ฒฐ๊ณผ ์ทจํฉ ๋ฐ ๊ฐ๊ณต
๊ฒฐ๊ณผ ์ ์ฅ
}
}
์ฒซ ๋ฒ์งธ for()
๋ฅผ foreach()
๋ก ๋ฐ๊ฟจ์ด์ผ ํ๋๋ฐ foreach()
์ ๊ธฐ์กด ์ฝ๋๋ฅผ ํต์งธ๋ก ๋ฃ์ด๋ฒ๋ ธ๋ค.
๋ฐ๋ณต๋ฌธ์ ํ๋ ๋ ์์ ์ผ๋ ์์ฒญ ๋๋ ค์ง ๊ฒ์ด๋ค.
์ด๋ค ๋ฐ๋ณต๋ฌธ์ ๋ณ๋ ฌ์ฒ๋ฆฌํ ์ง ์ ํํด์ผ ํ๋ค.
์๋ฌดํผ, foreach
์๋ ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ์๋ค.
|
|
์์ ๊ฐ์ด ์ฌ์ฉํ๋ค.
%:%
: nesting operator.foreach
๋ฅผ ๊ฒน๊ฒน์ด ์ฌ์ฉํ ๋,
๋ฐ๊นฅ์foreach
์์%dopar%
,%do%
๋์ ์จ์ค๋ค.