Foreach .combine函数以合并R中的列表

时间:2018-10-30 18:48:14

标签: r loops foreach parallel-processing

以下是我试图在R中运行的并行循环:

cl <- makeCluster(30,type="SOCK")

registerDoSNOW(cl)


results <- foreach (i = 1:30, .combine='bindlist', .multicombine=TRUE) %dopar% {
           test <- i
           test <- as.list(test)
           list(test)
         }

stopCluster(cl)

我的代码输出始终是一个列表,我想将该列表合并为一个大列表。因此,我编写了以下.combine函数:

bindlist <- function(x,y,...){
  append(list(x),list(y),list(...))
}

由于我正在进行多次运行,并且变量数量发生了变化,因此我尝试使用...。但是,它不起作用。我该如何重写.combine函数,以便它可以更改变量数量?

1 个答案:

答案 0 :(得分:3)

您是否考虑过使用'c'

results <- foreach (i = 1:4, .combine='c', .multicombine=TRUE) %dopar% {
  test <- i
  test <- as.list(test)
  list(test)
}

如果这会在结果中增加一个多余的“级别”,则可以使用“取消列出”来删除该级别。

unlist(results, recursive = FALSE)