我打算使用R中的「clhs」包提取來自羣體(a,b,c,d,...參見下文)的代表性樣本。採樣過程需要在我的(多核)計算機上很長時間,所以我想並行運行採樣程序(同時使用多個CPU核心)。使用多個核心並行運行拉丁超立方體採樣
這些是我的一些(例如)數據幀從其中我要繪製的樣品(「羣體」)的:
a <- as.data.frame(replicate(1000, rnorm(20)))
b <- as.data.frame(replicate(1000, rnorm(20)))
c <- as.data.frame(replicate(1000, rnorm(20)))
d <- as.data.frame(replicate(1000, rnorm(20)))
的CLHS代碼我想運行是:
clh_a <- clhs(x=a, size=round(nrow(a)/5), iter=2000, simple=F)) # 20% of all samples should be selected
clh_b <- clhs(x=b, size=round(nrow(b)/5), iter=2000, simple=F))
etc ...
什麼是並行運行此採樣過程的方式?或者還有另一種有效的方式來做到這一點?
附錄(非常感謝 「zipfzapf」):
我試圖用 「parLapply」 - 不幸的是,到了最後,R是拋出一個錯誤消息說:在長度「錯誤(X) :'x'不見了「,我真的不明白......任何想法?
我的代碼:
library("snow")
a <- as.data.frame(replicate(1000, rnorm(20)))
b <- as.data.frame(replicate(1000, rnorm(20)))
c <- as.data.frame(replicate(1000, rnorm(20)))
d <- as.data.frame(replicate(1000, rnorm(20)))
abcd <- list(a, b, c, d)
cl <- makeCluster(4)
results <- parLapply(cl,
X = abcd,
FUN = function(i) {
clhs(x = i, size = round(nrow(i)/5), iter = 2000, simple = FALSE)
},
)
確實,你使用「sfLapply」的解決方案似乎效果不錯!我剛剛觀察到奇怪的system.time值,這可能是由於並行模式...?無論如何,非常感謝,這節省了我很多時間! – Chega