gpt4 book ai didi

r - 使用多个内核并行运行拉丁超立方体采样

转载 作者:行者123 更新时间:2023-12-03 21:40:16 28 4
gpt4 key购买 nike

我打算使用 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))

等等...

并行运行此采样过程的方法是什么?或者有没有另一种有效的方式来做到这一点?

附录(非常感谢“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)
},
)

最佳答案

这对我有用(注意我改变了迭代次数以使事情以合理的速度前进)。

library(snowfall)
sfInit(parallel = TRUE, cpus = 4, type = "SOCK")
sfLibrary(clhs)

x <- sfLapply(abcd, fun = function(x) {
clhs(x = x, size=round(nrow(x)/5), iter = 200, simple =FALSE)
})

Length Class Mode
[1,] 5 cLHS_result list
[2,] 5 cLHS_result list
[3,] 5 cLHS_result list
[4,] 5 cLHS_result list

关于r - 使用多个内核并行运行拉丁超立方体采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13989216/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com