首页 > 解决方案 > 嵌套 for 循环中的打印输出和存储向量的结果不同。是什么赋予了?

问题描述

我相信这可能很简单,但我已经尝试了好几个小时。打印的输出是我想要的矢量。它正在做我想要的。

x1<-c(1,2,3,4)
x2<-c(1,0)
len<- length(filename)
output <- vector("numeric", 8)

for (i in x1){
    for(j in x2){
       print(sum(i+j))
       output[i]<- i
    }
}
output

但是,我很困惑为什么我会得到这两个不同的结果:

[1] 2
[1] 1
[1] 3
[1] 2
[1] 4
[1] 3
[1] 5
[1] 4
> output
[1] 1 2 3 4 0 0 0 0

如何将print结果存储为向量?谢谢。

标签: rfor-loopnested-loops

解决方案


根据?print

print 打印其参数并以不可见的方式返回它(通过 invisible(x))。

我们可能需要初始化一个sum1对象sum(i + j)

sum1 <- NULL
 output <- vector("numeric", 8)

 for (i in x1){
     for(j in x2){
      sum1 <- c(sum1, i + j)
  output[i]<- i
  }
 }

-输出

> sum1
[1] 2 1 3 2 4 3 5 4

print关于“输出”和“输出”之间的区别。很明显 - printing 是在sum(i + j)(和the一样sum在这里是多余的) 上完成的,因为输出仅与值一起存储。向量的初始化也是一个数值向量,其值为 0,长度为 8i + jsumi

>  output <- vector("numeric", 8)
> output
[1] 0 0 0 0 0 0 0 0

初始化也可以这样完成

> output <- numeric(8)

其中 x1 值的长度为 4。因此,在前 4 次迭代之后,没有什么可以填充 0 值保持原样。


R中,这也可以用outer

> c(t(outer(x1, x2, FUN = `+`)))
[1] 2 1 3 2 4 3 5 4

或与sapply

> c(sapply(x1, `+`, x2))
[1] 2 1 3 2 4 3 5 4

推荐阅读