Parallel R programming

DK-BigData
이동: 둘러보기, 찾기

Parallel R programming

multicore

library(parallel)
mclapply, a parallel version of lapply.
mcparallel, do something in a separate process.
mccollect, get the results from call(s) to parallel


 mclapply(X, FUN, ..., mc.preschedule = TRUE, mc.set.seed = TRUE, mc.silent = FALSE, mc.cores = detectCores())
 # mc.preschedule=TRUE : 데이터를 미리정해진 코어의 수(n)로 나누어 각 프로세스에 전달되며, FALSE이면 각 자료값들에 대하여 순차적으로 job이 구성됨
 # mc.cores 생성될 최대 프로세스의 개수
 # mc.silent=TRUE 각각의 프로세스에서 표준출력을 방지하기 위함
 # mc.set.seed=TRUE 프로세스에서의 seed값을 하나로 통일, FALSE이면 다른 값을 부여
fold <- sample (seq(1, 2), size = nrow(iris), replace = TRUE )
fold.cv <- function (i) {
  trset <- iris[fold == i, ]
  teset <- iris[fold != i, ]
  tr.tree <- rpart(Species ~ ., data = trset )
  test <- predict(tr.tree , teset )
  pred <- ifelse(test > 0.5 , 1, 0)
  true <- teset$Species
  mean(true == pred)
}
library(parallel)
system.time( { acc <- do.call(c, mclapply(seq_len(2), fold, mc.cores = detectCores()) ) })
library(parallel)
library(MASS)
RNGkind("L'Ecuyer-CMRG")
mc.cores <- detectCores()
results <- mclapply(rep(25, 4), function(nstart) kmeans(Boston, 4, nstart=nstart),
  mc.cores=mc.cores)
i <- sapply(results, function(result) result$tot.withinss)
result <- results[[which.min(i)]]
result