首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Foreach组合输出特定向量

Foreach组合输出特定向量
EN

Stack Overflow用户
提问于 2017-09-21 21:27:52
回答 2查看 7.3K关注 0票数 1

我刚刚开始使用foreach & parallel,在将每次迭代的输出组合起来时遇到了一些挑战。

目前,在每次迭代中,我都输出一组变量,我想将这些变量组合成一个向量,这样我就可以在所有迭代中获得一些汇总统计数据。举个例子:

代码语言:javascript
复制
foreach (s = 1:num) %dopar%{
var1 = ...
var2 = ...
var3 = ...}

最后,我想要包含每个迭代产生的输出的3个向量,因此: var1 = c(var1来自s=1,var1来自s=2,var1来自s=3,.)

我查看了.combine选项,并试图创建一个附加函数,但没有成功。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-22 00:57:04

{}foreach...%dopar%之后的行为类似于一个函数,也就是说,不管您是否显式指定它,它都会返回一个值。通常不指定它,但通过指定可以返回任何您喜欢的值。

代码语言:javascript
复制
foreach(I=1:3) %dopar% { <complicated stuff> 
                         return(1) }

# [[1]]
# [1] 1

# [[2]]
# [1] 1

# [[3]]
# [1] 1

在您的情况下,您希望返回3个向量,不幸的是,这是不可能的。

代码语言:javascript
复制
library(foreach)
library(doParallel)
cl <- makeCluster(detectCores())
registerDoParallel(cl)

foreach(I=1:8) %dopar% { v1 <- "ant"
                 v2 <- "pant"
                 return(v1, v2) }

会导致以下错误:

代码语言:javascript
复制
Error in { : task 1 failed - "multi-argument returns are not permitted"

但是您可以列出向量的列表,并返回值。

代码语言:javascript
复制
foreach(I=1:8, .combine=rbind) %dopar% {  v1 <- "ant"
                                          v2 <- "pant"
                                          return(list(v1, v2)) }

         # [,1]  [,2]  
# result.1 "ant" "pant"
# result.2 "ant" "pant"
# result.3 "ant" "pant"
# result.4 "ant" "pant"
# result.5 "ant" "pant"
# result.6 "ant" "pant"
# result.7 "ant" "pant"
# result.8 "ant" "pant"

stopCluster(cl)
票数 5
EN

Stack Overflow用户

发布于 2017-09-21 22:40:48

使用future解决方案

doFuturefutureforeach包装器,我更喜欢它而不是parallel

这里我们创建了data.frame res,您可以使用res$vector1访问矢量

代码语言:javascript
复制
library(doFuture)
registerDoFuture()
plan(multiprocess)

Nlength <- 1000
Nvector <- 3

res <- foreach(i = 1:Nvector, .combine = cbind) %dopar% {
    1:Nlength / pi * rnorm(1)
}
res <- data.frame(res)
colnames(res) <- paste0("vector", 1:Nvector)

dim(res)
[1] 1000    3
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46353429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档