为什么R中的此for循环重复多次?

时间:2018-10-12 12:42:21

标签: r for-loop

我正在整理迭代,并在R for Data Science(http://r4ds.had.co.nz/iteration.html)中进行了一些循环练习。我将此for循环编写为模仿“墙上有99瓶啤酒”:

number <- 99:0
for (i in number) {
 print(paste(number, "bottles of beer on the wall"))
}

这会重复几次然后停止,我不清楚为什么会发生这种情况?

更新

上面的99:0并不等于99,它将将产生预期的结果。我的代码存在的问题是未按照下面的答案中所述正确索引它。

4 个答案:

答案 0 :(得分:7)

我认为您想在循环中使用i,而不是number

number <- 99:0
for (i in number) {
 print(paste(i, "bottles of beer on the wall"))
}

答案 1 :(得分:3)

编辑:@bobbel首先是:-)

您需要在循环中print(i),而不是print(number)。后者是全部个数字的向量,因此重复了很多次。

[1] "5 bottles of beer on the wall"
[1] "4 bottles of beer on the wall"
[1] "3 bottles of beer on the wall"
[1] "2 bottles of beer on the wall"
[1] "1 bottles of beer on the wall"

代码

number <- 5:1
for (i in number) {
    print(paste(i, "bottles of beer on the wall"))
}

答案 2 :(得分:2)

如前所述,由于您忘记在循环中为索引编号,因此将重复100次。你不是说...

for (i in number) {
  print(paste(number[99-i], "bottles of beer on the wall"))
}

答案 3 :(得分:1)

如果您想要更简洁的版本,请使用map_dbl()中的purrr

map_dbl(99:1,print(paste(99:1,'bottles of beer on the wall')))

这确实返回错误:Error: Result 1 is not a length 1 atomic vector,但是您肯定会计算出99次重复!