【发布时间】:2016-10-04 19:46:09
【问题描述】:
我想将Reduce 代码运行到out1 66000 个列表元素的列表:
trialStep1_done <- Reduce(rbind, out1)
但是,运行时间太长。我想知道是否可以在并行计算包的帮助下运行此代码。
我知道有mclapply,mcMap,但是我在并行计算包中没有看到像mcReduce这样的功能。
是否有类似 mcReduce 的函数可用于在 R 中并行执行 Reduce 以完成我想做的任务?
非常感谢@BrodieG 和@zheYuan Li,您的回答很有帮助。我认为下面的代码示例可以更准确地代表我的问题:
df1 <- data.frame(a=letters, b=LETTERS, c=1:26 %>% as.character())
set.seed(123)
df2 <- data.frame(a=letters %>% sample(), b=LETTERS %>% sample(), c=1:26 %>% sample() %>% as.character())
set.seed(1234)
df3 <- data.frame(a=letters %>% sample(), b=LETTERS %>% sample(), c=1:26 %>% sample() %>% as.character())
out1 <- list(df1, df2, df3)
# I don't know how to rbind() the list elements only using matrix()
# I have to use lapply() and Reduce() or do.call()
out2 <- lapply(out1, function(x) matrix(unlist(x), ncol = length(x), byrow = F))
Reduce(rbind, out2)
do.call(rbind, out2)
# One thing is sure is that `do.call()` is super faster than `Reduce()`, @BordieG's answer helps me understood why.
所以,此时,对于我的 200000 行数据集,do.call() 很好地解决了问题。
最后,我想知道这是否是一种更快的方法?或者@ZheYuanLi 用matrix() 演示的方式在这里可以实现吗?
【问题讨论】:
标签: r parallel-processing reduce