繁体   English   中英

使用foreach循环并使用r中的函数进行组合

[英]using the foreach loop and combining using a function in r

我正在阅读r中foreach软件包的文档,并且能够理解.combine是如何在crbindcbind 但是文档指出,如果要使用此功能进行组合,还可以在语句.combine功能名称传递给.combine 尝试访问要合并的此函数内部的每个foreach的各个元素时,我无法理解输出。 (让我将此函数称为mycombinefunc

这就是我尝试过的。 我不明白为什么在foreach语句的输出中输出两次。

> mycombinefunc= function(...){mylist = list(...);print(mylist)}

> foreach(i=1:2, .combine='mycombinefunc') %do% {c(1:5)}
[[1]]
[1] 1 2 3 4 5

[[2]]
[1] 1 2 3 4 5

[[1]]
[1] 1 2 3 4 5

[[2]]
[1] 1 2 3 4 5

#just calling the function directly to show what the expected output for one iteration of the foreach loop looks like. I would have expected that the above function call would produce two copies of the below output
> mycombinefunc(c(1:5))
[[1]]
[1] 1 2 3 4 5

运行合并功能以将新结果合并到先前结果。 在您的示例中,您看到的输出是两次,因为您在Combine函数中显式包含了一条print()语句,因此您可以看到传递给Combine函数的两个向量。 然后,该值从foreach()返回,并且默认情况下R将把该函数的结果打印到控制台。

您应该期望自己的combine接收两个值。 来自先前迭代和当前迭代的一个。 所以真正被称为的是

mycombinefunc(1:5, 1:5)

并期望将其“组合”成一个结果。 这与R中的Reduce()函数的工作原理非常相似。 也许查看?Reduce帮助页面以获取更多信息。

假设您想要一个可以将向量相加的Combine函数,您可以

mycombinefunc= function(a,b){a+b}
foreach(i=1:3, .combine='mycombinefunc') %do% {c(1:5)} 
# [1]  3  6  9 12 15

请注意,我们如何从foreach()返回一个结果。 我们没有看到任何中间值,因为我们从Combine函数中删除了print() 另外,我们得到一个向量而不是一个列表,因为我们选择将元素加在一起而不是附加到列表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM