R:在集群/并行化环境中按组聚合多列

R:在集群/并行化环境中按组聚合多列,r,parallel-processing,aggregate,cluster-computing,R,Parallel Processing,Aggregate,Cluster Computing,我在一个包含许多组的大型数据集上运行引导,并且是在并行环境中进行的。我想按组对每个模拟进行聚合/求和。以下是我对示例数据的尝试: library(parallel) cl <- makeCluster(detectCores()-1) clusterEvalQ(cl,library(MASS)) # create sample data df <- data.frame(c("g1", "g1", "g1", &quo

我在一个包含许多组的大型数据集上运行引导,并且是在并行环境中进行的。我想按组对每个模拟进行聚合/求和。以下是我对示例数据的尝试:

library(parallel)
cl <- makeCluster(detectCores()-1)  
clusterEvalQ(cl,library(MASS))

# create sample data
df <- data.frame(c("g1", "g1", "g1", "g2", "g2", "g2", "g2", "g2"),
                 c(1, 2, 3, 4, 5, 6, 7, 8),
                 c(9, 10, 11, 12, 13, 14, 15, 16),
                 c(17, 18, 19, 20, 21, 22, 23, 24))

# rename columns
colnames(df) <- c("Group", "sim1", "sim2", "sim3")

#import data into cluster
clusterExport(cl,c("df"))
output <- parSapply(cl, 1:1, function(i,...) {x <- aggregate(.~Group, df, FUN = sum)} )
stopCluster(cl)
库(并行)

实际上,只要在
parapply
中设置
simplify=FALSE
,或者首先使用
parlappy
就可以得到所需的结果,不是吗?不幸的是,事实并非如此。这两种方法都会产生一个1的列表,这是所需的数据帧。
el(parlappy(…)
?这很有效!函数el()是什么?我在任何地方都找不到关于它的任何文档。编辑:没关系,我一直忘了?函数是一个选项。非常感谢。是的,键入
?el
揭示了这个秘密,它基本上与添加
lappy(…)[[1]]
相同,实际上只是在
parapply
中设置
simplify=FALSE
,或者首先使用
parlappy
应该会给你想要的结果,不是吗?不幸的是,它没有。这两种方法都会产生一个1的列表,这是所需的数据帧。
el(parlappy(…)
?这很有效!函数el()是什么?我在任何地方都找不到关于它的任何文档。编辑:没关系,我一直忘了?函数是一个选项。非常感谢。是的,键入
?el
揭示了这个秘密,它基本上与添加
lappy(…)[[1]]]
desired_output <- do.call(cbind, output)
desired_output <- aggregate(.~Group, df, FUN = sum)