Snow中的clusterMap似乎不支持动态处理。我想用存储在数据帧中的两对参数进行并行计算。但是每个工作的经过时间差别很大。如果作业是非动态运行的,那将非常耗时。
e.g。
library(snow)
cl2 <- makeCluster(3, type = "SOCK")
df_t <- data.frame (type=c(rep('a',3),rep('b',3)), value=c(rep('1',3),rep('2',3)))
clusterExport(cl2,"df_t")
clusterMap(cl2, function(x,y){paste(x,y)},
df_t$type,df_t$value)
答案 0 :(得分:1)
clusterMap
确实不支持动态处理,但代码中有一条评论表明它可能会在将来实施。
与此同时,我会根据数据创建一个列表,以便使用稍微不同的工作函数调用clusterApplyLB
:
ldf <- lapply(seq_len(nrow(df_t)), function(i) df_t[i,])
clusterApplyLB(cl2, ldf, function(df) {paste(df$type, df$value)})
这在将clusterMap
添加到雪包中之前很常见。
请注意,使用clusterMap
实际上并不要求您导出df_t
,因为您的工作人员功能并未引用它。但是,如果您愿意将df_t
导出给工人,您也可以使用:
clusterApplyLB(cl2, 1:nrow(df_t), function(i){paste(df_t$type[i],df_t$value[i])})
在这种情况下,必须将df_t
导出到集群worker,因为worker函数引用它。但是,由于每个工作人员只需要整个数据帧的一小部分,因此效率通常较低。
答案 1 :(得分:0)
我在Parallel包支持LB中找到了clusterMap。但它的效率低于clusterApplyLB与Snow实现的lapply相结合的方法。我试图找出要弄清楚的源代码。但是当我点击链接'source'和'R code'时,clusterMap不可用。