使 .combine 函数可扩展
我正在尝试使用 foreach,但在使 .combine 函数可扩展时遇到问题。例如,这是一个简单的组合函数,
MyComb <- function(part1,part2){
xs <- c(part1$x,part2$x)
ys <- c(part1$y,part2$y)
return(list(xs,ys))
}
当我使用此函数将 foreach 语句与 2 以外的迭代器组合时,它会错误地返回。例如,这可行:
x = foreach(i=1:2,.combine=MyComb) %dopar% list("x"=i*2,"y"=i*3)
但不是这样:
x = foreach(i=1:3,.combine=MyComb) %dopar% list("x"=i*2,"y"=i*3)
有没有办法概括合并函数以使其可扩展到 n 次迭代?
I am trying to use foreach and am having problems making the .combine function scalable. For example, here is a simple combine function
MyComb <- function(part1,part2){
xs <- c(part1$x,part2$x)
ys <- c(part1$y,part2$y)
return(list(xs,ys))
}
When I use this function to combine a foreach statement with an iterator other than 2 it returns it incorrectly. For example this works:
x = foreach(i=1:2,.combine=MyComb) %dopar% list("x"=i*2,"y"=i*3)
But not this:
x = foreach(i=1:3,.combine=MyComb) %dopar% list("x"=i*2,"y"=i*3)
Is there a way to generalize the combine function to make it scalable to n iterations?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的 .combine 函数必须采用两部分并返回“看起来”像一块的东西(可以作为一部分传回),或者采用许多参数并将它们一次性放在一起(使用相同的限制)。因此,至少您的
MyComb
必须返回一个包含组件x
和y
的列表(这是您的%dopar%< 的每个部分的内容) /code>
有几种方法可以做到这一点:
这个版本一次只需要两个部分,
然后将它们组合起来。 它更通用(但更复杂)。
Your
.combine
function must take either two pieces and return something that "looks" like a piece (could be passed back in as a part) or take many arguments and put all of them together at once (with the same restrictions). Thus at least yourMyComb
must return a list with componentsx
andy
(which is what each piece of your%dopar%
do.A couple of ways to do this:
This version takes only two pieces at a time.
This one can take multiple pieces at a time and combine them. It is more general (but more complex).