seq_along
が機能するが、seq
が意図しない結果を生成する場合の良い例は何ですか?
?seq
のドキュメントから:
引数名に関係なく、最初の引数のクラスにディスパッチすることに注意してください。これは、
along.with
として解釈されることを意図して1つの引数のみで呼び出された場合、意図しない結果になる可能性があります。その場合はseq_along
を使用することをお勧めします。
これにより、違いが明確になります。基本的に、seq()
はseq_along()
exceptのように機能し、長さ1のベクトルが渡された場合、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
_
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