R for循环中出现意外结果

时间:2014-02-23 03:00:38

标签: r loops for-loop

我不知道为什么这不能给我预期的结果。

这是我的载体:

flowers = c("Flower", "Flower", "Vegatative", "Vegatative", "Dead")

这是我的for循环:

   Na = 0
for (i in 1:length(flowers)){
  if (i != "Dead"){
    Na = Na + 1
  }
}
Na

显然Na应该等于4,但是它给了我5的结果。当我打印花的状态时,它打印所有5.我不希望它读取最后一个。我的问题是什么?

谢谢。

2 个答案:

答案 0 :(得分:4)

您似乎正在尝试计算flowers中不等于“Dead”的值的数量。在R中,这样做的方法是:

sum(flowers != "Dead")
# [1] 4

答案 1 :(得分:0)

代码中的错误就在这一行:

if (i != "Dead"){

要理解原因,最好在循环中打印出i的值:

for (i in 1:length(flowers)){
  print(i)
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

也就是说,您正在迭代数字(向量的索引),但在进行测试时实际上并未从向量中选择值。要访问这些值,请使用flowers[i]

for (i in 1:length(flowers)){
  print(flowers[i])
}
[1] "Flower"
[1] "Flower"
[1] "Vegatative"
[1] "Vegatative"
[1] "Dead"

所以,你原来问题的答案是:

Na = 0
for (i in 1:length(flowers)){
  if (flowers[i] != "Dead"){
    Na = Na + 1
  }
}
Na
[4]

R为没有循环的计算提供了很多设施 - 它被称为矢量化。关于它的一篇好文章是John Cook的5 Kinds of Subscripts in R。例如,您可以得到相同的结果:

length(flowers[flowers != "Dead"])
[1] 4