84

seq_along機能するがseq、意図しない結果が生じる場合の良い例は何ですか?

私たちのドキュメントから?seq

引数名に関係なく、最初の引数のクラスでディスパッチされることに注意してください。これが と解釈されることを意図して 1 つの引数のみで呼び出された場合、これは意図しない結果をもたらす可能性があります 。その場合along.withは、使用する方がはるかに優れていますseq_along

4

2 に答える 2

132

これにより、違いが明確になります。基本的に、長さ1のベクトルが渡された場合を除いてseq()、のように動作します。この場合、のように動作します。これが一度あなたを噛んだ場合、あなたは二度と使用することはありません!seq_along() seq_len()seq()

a <- c(8, 9, 10)
b <- c(9, 10)
c <- 10

seq_along(a)
# [1] 1 2 3
seq_along(b)
# [1] 1 2
seq_along(c)
# [1] 1

seq(a)
# [1] 1 2 3
seq(b)
# [1] 1 2
seq(c)
# [1]  1  2  3  4  5  6  7  8  9 10

sample()同様に不器用な振る舞いを示すことはおそらく注目に値します:

sample(a)
# [1] 10  8  9
sample(b)
# [1]  9 10
sample(c)
# [1]  8  7  9  3  4  1  6 10  2  5
于 2012-12-05T21:01:40.783 に答える
26

seqへの入力が長さ1の場合、との間の出力はseq異なりseq_alongます。

x <- 5
for(i in seq(x)){
    print(x[i])
}
#[1] 5
#[1] NA
#[1] NA
#[1] NA
#[1] NA

for(i in seq_along(x)){
    print(x[i])
}
#[1] 5

入力が日付のベクトルである場合にも違いが見られます

x <- Sys.Date() + 1:5
seq(x)
#Error in seq.Date(x) : 'from' must be of length 1
seq_along(x)
#[1] 1 2 3 4 5
于 2012-12-05T20:53:19.467 に答える