我有一个需要操纵三个数据帧的函数,所有的数据帧都具有不同的结构:
a
:原始数据帧。这是我的功能的参数。给定某些条件,我需要从此处删除行。b
:在我的函数中创建了新的数据框。我的函数在这里添加所有行。c
:在我的函数中创建了另一个新的数据框。我的函数在这里添加所有行。为了尝试并行处理,我坐了一个最小的代码(遵循此问题和此博客),其中仅生成了b
:
# Set up the parallel
registerDoParallel( makeCluster(3L) )
b <- foreach(i = 1:nrow(f), .combine = rbind) %dopar% {
tempB <- do_something_function()
tempB
}
该示例运行完美,但是我缺少两个数据帧。我找到了其他答案,但我确实相信我的情况有所不同:
我可以更改a
为行的数据框,然后将其删除,但是只要有任何意义,我就tempA
只需要合并所有行即可tempA
。在我链接的先前问题中,它们混合了所有输出。
看来您的问题与并行性无关,而与合并结果有关。
解决方案示例(我认为这是最有效的实现方法):
library(foreach)
tmp <- foreach(i = seq_len(32)) %do% {
list(iris[i, ], mtcars[i, ], iris[i, ])
}
lapply(purrr::transpose(tmp), function(l) do.call(rbind, l))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句