如何在R中制定for循环,我可能想循环零次?

fma*_*ark 6 for-loop idioms r

我想循环遍历一系列数字1:n,当R中n的向量长度时v.通常,我会使用for (i in 1:length(v))语法,但这会失败n == 0.

这种循环的惯用方法是什么?目前我做了跟随,但似乎有点难看:

# This is in my standard library
rng <- function(n)seq(from=1, to=n, length.out=n)

# Now when I come to the for loop:
for(i in rng(length(v))){
   print(paste("I ate", i, "kg of brocolli today"))
}
Run Code Online (Sandbox Code Playgroud)

是的,我知道矢量化更好,但有些情况下,矢量化是不可能的,或者需要这么多额外的工作,以至于更难以阅读代码.

koh*_*ske 12

最好使用seq_along:

> v <- letters[1:3]
> for (i in seq_along(v)) print(c(i, v[i]))
[1] "1" "a"
[1] "2" "b"
[1] "3" "c"
> 
> v <- numeric(0)
> for (i in seq_along(v)) print(c(i, v[i]))
Run Code Online (Sandbox Code Playgroud)

  • 另外,`seq_len(0)`给出一个长度为0的向量(如果你有一个保持限制的变量,而不是一个向量循环的向量). (3认同)