효율적인 R 코드 작성
Colin Gillespie
Jumping Rivers & Newcastle University
apply 계열 함수의 병렬 버전이 존재합니다
apply()- parApply()sapply()- parSapply()lapply()- parLapply()sapply()는 for 루프를 작성하는 또 다른 방법입니다
루프
for(i in 1:10)
x[i] <- simulate(i)
다음과 같이 작성할 수 있습니다
sapply(1:10, simulate)
벡터의 각 값에 함수를 적용합니다
동일한 절차입니다!
parSapply()로 전환plot(pokemon$Defense, pokemon$Attack)
abline(lm(pokemon$Attack ~ pokemon$Defense), col = 2)
cor(pokemon$Attack, pokemon$Defense)
0.437

이상적으로는 모집단에서 재표본을 추출해야 하지만, 현실적으로는 불가능합니다
대신, 원래 표본이 모집단을 대표한다고 가정합니다
bootstrap <- function(data_set) {
# Sample with replacement
s <- sample(1:nrow(data_set), replace = TRUE)
new_data <- data_set[s,]
# Calculate the correlation
cor(new_data$Attack, new_data$Defense)
}
# 100 independent bootstrap simulations
sapply(1:100, function(i) bootstrap(pokemon))
parSapply()로 전환library("parallel")
no_of_cores <- 7
cl <- makeCluster(no_of_cores)
clusterExport(cl,
c("bootstrap", "pokemon"))
parSapply(cl, 1:100,
function(i) bootstrap(pokemon))
stopCluster(cl)

효율적인 R 코드 작성