为什么for循环在某些位置(在R中)返回NA向量?

时间:2019-07-14 11:26:02

标签: r

在YouTube教程之后,我创建了一个向量x [-3,6,2,5,9]。 然后我用函数'numeric(5)'创建一个长度为5的空变量

我想通过for循环将向量x的平方存储在“ Storage2”中。 当我执行for循环并更新变量时,它返回一个非常奇怪的东西: [1] 9 4 0 9 25 36 NA NA 81

我可以看到x中的所有数字都是平方的,但是顺序是如此随机,并且有5个以上。

此外,为什么会有NA?如果是因为x的最后一个数字是9(所以这个数字定义了长度?),并且我没有理解7和8的位置,但是我也缺少了位置1、3和4,因此应该是更多的NA ...

我只是从R开始,所以请保持简单,如果我在思考过程中错了,请纠正我!谢谢!!

x <- c(-3,6,2,5,9)

Storage2 <- numeric(5)

for(i in x){
  Storage2[i] <- i^2
}

Storage2
# [1]  9  4  0  9 25 36 NA NA 81

1 个答案:

答案 0 :(得分:1)

您正在遍历x的元素,而不是预期的位置。您需要像这样更改循环:

for(i in 1:length(x)) {
  Storage2[i] <- x[i]^2
}

Storage2
# [1]  9 36  4 25 81

注意: 1:length(x)也可以表示为seq_along(x),正如 @NelsonGon 在评论中指出的那样,并且可能更快。)

但是,R是向量化语言,因此您可以轻松地做到这一点:

Storage2 <- x^2
Storage2
# [1]  9 36  4 25 81