我注意到R. foreach
和print
在R. foreach中以某种方式重复元素的行为,但是将结果分配给变量"纠正"它
> for (i in 1:3) {print(i+1)}
[1] 2
[1] 3
[1] 4
> foreach (i=1:3) %do% {print(i+1)}
[1] 2
[1] 3
[1] 4
[[1]]
[1] 2
[[2]]
[1] 3
[[3]]
[1] 4
> x<-foreach (i=1:3) %do% {print(i+1)}
[1] 2
[1] 3
[1] 4
> x
[[1]]
[1] 2
[[2]]
[1] 3
[[3]]
[1] 4
> foreach (i=1:3, .combine=c) %do% {print(i+1)}
[1] 2
[1] 3
[1] 4
[1] 2 3 4
> foreach (i=1:3) %do% {(i+1)}
[[1]]
[1] 2
[[2]]
[1] 3
[[3]]
[1] 4
> x <-foreach (i=1:3) %do% {(i+1)}
> x
[[1]]
[1] 2
[[2]]
[1] 3
[[3]]
[1] 4
> x<-for (i in 1:3) {(i+1)}
> x
NULL
此外,这让我进入了简单for
的最后一次测试。 for
循环不会在foreach
时输出结果。
如果我想从for子句中获取结果,是否有另一种专用方式而不是
> x <- NULL
> for (i in 1:3) {x <- cbind(x,(i+1))}
> x
[,1] [,2] [,3]
[1,] 2 3 4
答案 0 :(得分:1)
在帮助页面中,?foreach
(重点已添加):
foreach
和%do%
/%dopar%
运算符提供了一个循环结构,可以将其视为标准for
循环和lapply
函数的混合体。它看起来类似于for
循环,它评估表达式而不是函数(如lapply
中),但它的目的是返回一个值(列表< / strong>,默认情况下),而不是引起副作用。
关于lapply
的链接,它也返回一个列表,观察上述代码的模拟:
lapply(1:3, print)
[1] 1
[1] 2
[1] 3
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
因此lapply
循环在迭代中打印每个值,然后以与foreach
相同的方式将输入作为列表返回。