6

からの数値の範囲をループしたいのですが1:n、はRnのベクトルの長さです。通常は構文を使用しますが、。の場合は失敗します。vfor (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"))
}

はい、私はベクトル化する方が良いことを知っていますが、ベクトル化が不可能であるか、コードを読むのがはるかに難しいほど多くの余分な作業を必要とする状況があります。

4

1 に答える 1

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]))
于 2012-06-19T02:40:01.640 に答える