1
我注意到R中foreach
和print
的行为。foreach以某种方式重复元素,但将结果赋值给变量“纠正”它。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
。 如果我想拿起从子句的结果,是有另一种专用的方式,而不是
> x <- NULL
> for (i in 1:3) {x <- cbind(x,(i+1))}
> x
[,1] [,2] [,3]
[1,] 2 3 4
'foreach'默认返回一个列表。这与'lapply'是相同的行为。试试'lapply(1:4,print)'。阅读'?foreach'的* Value *部分进行讨论。 – lmo
使用'for',必须手动完成,因为在运行之前知道'for'循环的长度,预先分配适当的对象并填充它。在这里,您可以执行'myVec < - integer (长度(1:3))'然后'为(我在1:3){print(i); myVec [i] < - i}'。当然,在更复杂的迭代器中,您可能必须构建一个单独的变量,从1到整个循环的长度递增。 – lmo
谢谢@lmo。这回答了可变部分的结果分配。关于什么样的foreach + print似乎是重复的结果,而foreach本身并没有,对此有何评论? – Kenny