我在foreach包中发现了一个功能/错误,我不明白.也许有人可以解释我这种行为:
我用foreach包创建了一个for循环(我将它们与mutlicore计算一起使用,但这里只是在一个sequentiell示例中,错误出现在两个变体中).这个循环运行r时间.在每次运行中,c都会返回包含条目的列表.所以我希望列表包含r条目,每个条目都包含c列表.
我的代码如下:
library(foreach)
clusters <- 10
runs <- 100
temp <- foreach(r = 1:runs,
.combine = 'list',
.multicombine = TRUE) %do% {
signal_all <- lapply(1:clusters, function(x){
return(1)
})
return(signal_all)
} ## end do
Run Code Online (Sandbox Code Playgroud)
使用此代码,所有工作都按预期工作,请参见下图:
但是当增加时runs <- 101,输出temp是这样的:
预期的列表结构被销毁.但是当评论出这一行时,.combine = 'list'所有工作都按预期进行.
library(foreach)
clusters <- 10
runs <- 100
temp <- foreach(r = 1:runs,
.multicombine = TRUE) %do% {
signal_all <- lapply(1:clusters, function(x){
return(1)
})
return(signal_all)
} ## end do
Run Code Online (Sandbox Code Playgroud)
有人可以解释这种行为吗?谢谢你的帮助!
与此同时,我找到了解决方案.
foreach函数知道一些comine函数(例如c或者cbind)接受许多参数,并且将使用多达100个参数(默认情况下)调用它们以提高性能.使用参数,.maxcombine您可以手动设置它们.
library(foreach)
clusters <- 10
runs <- 101
temp <- foreach(r = 1:runs,
.combine = 'list',
.maxcombine = runs,
.multicombine = T) %do% {
signal_all <- lapply(1:clusters, function(x){
return(1)
})
return(signal_all)
} ## end do
Run Code Online (Sandbox Code Playgroud)