R foreach和打印行为

时间:2017-10-06 09:00:23

标签: r for-loop printing foreach

我注意到R. foreachprint在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

1 个答案:

答案 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相同的方式将输入作为列表返回。