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

Results differ between printed output and stored vector in nested for loop. What gives?

我相信这可能很简单,但我已经花了好几个小时试图弄清楚这个问题。打印输出是我想要我的矢量的方式。它正在做我想要的。

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 结果存储为向量?谢谢

根据?print

print prints its argument and returns it invisibly (via invisible(x)).

我们可能需要初始化一个对象 (sum1) 并开始将 sum(i + j) 的输出连接到对象,同时将每次迭代的输出更新回 'sum1'

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和'output'的区别。很明显 - printing 是在 sum(i + j) 上完成的(sum 在这里是多余的,因为 i + j 也是 sum),其中输出存储在单独 i 值。 vector 的初始化也是一个数值向量,其值为 0,长度为 8

>  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