我不知道为什么这不能给我预期的结果。
这是我的载体:
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.我不希望它读取最后一个。我的问题是什么?
谢谢。
答案 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