什么时候seq_along有效,但seq会产生意想不到的结果?
从?seq我们的文档:
请注意,无论参数名称如何,它都会调度第一个参数的类.如果仅使用一个参数来调用它可能会产生意想不到的后果
along.with:这样做会更好:seq_along在这种情况下使用它会好得多.
Jos*_*ien 111
这应该明确区别.基本上,除了传递长度为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
Run Code Online (Sandbox Code Playgroud)
值得注意的是,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
Run Code Online (Sandbox Code Playgroud)
Das*_*son 25
如果输入到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
Run Code Online (Sandbox Code Playgroud)
如果输入是日期的向量,我们也会看到差异
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
Run Code Online (Sandbox Code Playgroud)