以下是我试图在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函数,以便它可以更改变量数量?
答案 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)