首页 > 解决方案 > 项目未正确添加到 r 中的预分配向量

问题描述

我正在尝试将数据添加到预先分配的列表中,但它只工作了一半。

x <- c(1,2,3,4,5,6,7,8,9,10)
y <- c(0.5,1,1.5,2,2.5,3,3.5,4,4.5,5)

x_num      <- rep(0,length(x))
y_num      <- rep(0,length(y))

for (i in x){
  x_diff <- i - mean(x)
  print(x_diff)
  x_num[i]  <- x_diff
}

[1] -4.5
[1] -3.5
[1] -2.5
[1] -1.5
[1] -0.5
[1] 0.5
[1] 1.5
[1] 2.5
[1] 3.5
[1] 4.5

> x_num
[1] -4.5 -3.5 -2.5 -1.5 -0.5  0.5  1.5  2.5  3.5  4.5

for (i in y){
  y_diff <- i - mean(y)
  print(y_diff)
  y_num[i]  <- y_diff
}

[1] -2.25
[1] -1.75
[1] -1.25
[1] -0.75
[1] -0.25
[1] 0.25
[1] 0.75
[1] 1.25
[1] 1.75
[1] 2.25

> y_num
[1] -1.25 -0.25  0.75  1.75  2.25  0.00  0.00  0.00  0.00  0.00

为 x_diff 和 y_diff 计算了正确的值,但只有 x_num 被正确填充。我在这里缺少什么吗?

标签: r

解决方案


您需要元素编号,因此您可能想要使用seq_along和子集y[i]

for (i in seq_along(y)){
  y_diff <- y[i] - mean(y)
  print(y_diff)
  y_num[i]  <- y_diff
}
# [1] -2.25
# [1] -1.75
# [1] -1.25
# [1] -0.75
# [1] -0.25
# [1] 0.25
# [1] 0.75
# [1] 1.25
# [1] 1.75
# [1] 2.25


y_num
# [1] -2.25 -1.75 -1.25 -0.75 -0.25  0.25  0.75  1.25  1.75  2.25

但是,R 是矢量化的,所以你可以这样做

y - mean(y)
# [1] -2.25 -1.75 -1.25 -0.75 -0.25  0.25  0.75  1.25  1.75  2.25

推荐阅读