什么是seq_along工作的例子,但seq会产生意想不到的结果?

时间:2012-12-05 20:43:11

标签: r seq

什么是seq_along何时有用的好例子,但seq会产生意想不到的结果?

?seq的文档中我们有:

  

请注意,它会调度第一个参数的类   不论参数名称如何。这可能会产生意想不到的后果   如果仅使用一个参数调用它,则将其视为   along.with:在这种情况下使用seq_along要好得多。

2 个答案:

答案 0 :(得分:107)

这应该明确区别。基本上,seq()在传递长度为1的向量时会像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

答案 1 :(得分:24)

如果seq的输入长度为1,那么seqseq_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

如果输入是Dates

的向量,我们也会看到差异
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