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

Ric*_*rta 67 r seq

什么时候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)

  • 以及所有随机生成器:`runif`,`rnorm`等. (9认同)
  • `diag`也是. (6认同)
  • @ user1317221_G - 我刚刚使用过这种想法:`safeSample < - function(x)if(length(x)== 1)x else sample(x)`.(尝试使用`safeSample(4:5); safeSample(5)`.) (6认同)

Das*_*son 25

如果输入到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
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)

  • 那个日期的例子很棒! (6认同)