你能解释一下,为什么,当我用序列填充R中的向量时,我得到了这个结果:
sekv <- seq(from = 1, to = 20, by = 2)
test <- c()
for (j in sekv) {
test[j] = j
}
test
[1] 1 NA 3 NA 5 NA 7 NA 9 NA 11 NA 13 NA 15 NA 17 NA 19
我想制作一个矢量,我可以用一些序列填充并在循环中使用它,但只能使用值,而不是NA值。有人可以帮帮我吗?
答案 0 :(得分:0)
在sekv中,您目前通过2 .. 4 ..6,使用seq_along
sekv <- seq(from = 1, to = 20, by = 2)
test <- c()
for (j in seq_along(sekv)) {
test[j] = j
}
test
答案 1 :(得分:0)
你在测试向量中有NA的原因是你将测试向量中的第一,第三,第五,第七等元素分配为1,3,5,7等......
我仍然不太清楚你想要做什么,但一个解决方案是你可以在for循环后删除所有的NA。
sekv <- seq(from = 1, to = 20, by = 2)
test <- c()
for (j in sekv) {
test[j] = j
}
test
# [1] 1 NA 3 NA 5 NA 7 NA 9 NA 11 NA 13 NA 15 NA 17 NA 19
test <- test[-c(which(is.na(test)))]
test
# [1] 1 3 5 7 9 11 13 15 17 19
正如@PoGibas建议的那样,如果你想删除NAs,这也有效:
test <- na.omit(test)
test
# [1] 1 3 5 7 9 11 13 15 17 19
答案 2 :(得分:0)
实际问题是,只要您尝试使用test[j]
的值为j
赋值,就可以更改向量的大小。 j
的最后一个值是19,因此test
的大小设置为19.但是您只为少数索引分配值,即1,3,5等。其余值设置为NA。< / p>
您可以仅针对for loop
中可用的项目数执行sekv
来解决此问题。
sekv <- seq(from = 1, to = 20, by = 2)
test <- c()
for (j in 1:length(sekv)) {
test[j] = sekv[j]
}
print(test)