用seq将循环中的值存储到vector中

ej83mcc0  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(109)

我可以在编写循环时有效地将循环中的值存储到向量中,如:

z = 0.5
x <- vector("numeric", 10)
for(i in 1:10){
x[i] <- z - i/10 
}
>[1]  0.4  0.3  0.2  0.1  0.0 -0.1 -0.2 -0.3 -0.4 -0.5

字符串
然而,当我使用一个数字序列而不是冒号分隔符时,比如:

z = 0.5
x <- vector("numeric", 20)
for(i in seq(0.05, 1, 0.05)){
x[i] <- z - i
}
>[1] -0.5  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0


它没有为i的每次迭代返回一个向量,为什么它会这样做,我如何才能让循环有效地与seq()一起工作?

92dk7w1h

92dk7w1h1#

你的索引也变成了双精度数,这就是问题所在。你可以用数字定义一个向量I,然后在seq的索引上循环。用i子集化I和结果x

z <- 0.5
x <- vector("numeric", 20)
I <- seq(0.05, 1, 0.05)
for (i in seq(I)) {
  x[i] <- z - I[i]
}
x
# [1]  0.45  0.40  0.35  0.30  0.25  0.20  0.15  0.10  0.05
# [10]  0.00 -0.05 -0.10 -0.15 -0.20 -0.25 -0.30 -0.35 -0.40
# [19] -0.45 -0.50

字符串
以防这不仅仅是一个简化的例子,因为R是矢量化的,所以你也可以只做

z - seq(0.05, 1, 0.05)
# [1]  0.45  0.40  0.35  0.30  0.25  0.20  0.15  0.10  0.05
# [10]  0.00 -0.05 -0.10 -0.15 -0.20 -0.25 -0.30 -0.35 -0.40
# [19] -0.45 -0.50

相关问题