foreach包中列表的结构

J_F*_*J_F 14 foreach r list

我在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)

在此输入图像描述

有人可以解释这种行为吗?谢谢你的帮助!

J_F*_*J_F 5

与此同时,我找到了解决方案.

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)