【发布时间】:2019-04-03 08:45:08
【问题描述】:
我想通过使用包“doParallel”和“foreach”在 R 中进行并行处理。而且,这个想法是只进行并行计算而没有任何结果。我发现看起来像“foreach”运算符总是返回某种在 RAM 中占用内存的结果。因此,我需要任何帮助才能获得并行处理循环的空结果。
# 1. Packages
library(doParallel)
library(foreach)
# 2. Create and run app cluster
cluster_app <- makeCluster(detectCores())
registerDoParallel(cluster_app)
# 3. Loop with result
list_i <- foreach(i = 1:100) %dopar% {
print(i)
}
# 4. List is not empty
list_i
# 5. How make loop with empty 'list_i' ?
# TODO: make 'list' equal NULL or NA
# 6. Stop app cluster
stopCluster(cluster_app)
【问题讨论】:
-
也许这个
return(NULL)? -
如果您真的想返回“无”,请使用
.combine = 'c'。 -
这两个假设都不成立。所有 100 个元素的第一个设置“NULL”值。第二个来自作为 100 个数字的结果列表。这里的问题是得到一个值作为结果 - NA 或 NULL。
-
print(x)实际上返回x不可见,例如y <- print(42)将 42 分配给y。因此,正如上面所建议的,y <- foreach(x = 1:3, .combine = c) %dopar% { ... ; NULL }将返回NULL。仅供参考,根据经验,您可以像想到lapply()一样想到foreach()- 也就是说 - 您想使用它们来返回值。很少有人只因为它们的副作用而想要它们。此外,不要假设元素的处理顺序。
标签: r foreach parallel-processing doparallel