seq_along工作但seq产生意外结果的例子有哪些?


76

有什么很好的例子说明什么时候seq_along会起作用,但seq会产生意想不到的结果?

从文档中?seq我们可以得到:

请注意,它与第一个参数的类一起分派,而与参数名称无关。如果只用一个参数调用它,这可能会产生意想不到的后果 along.withseq_along在这种情况下,使用它会更好。

Answers:


119

这应该使区别清楚。基本上,seq()就像seq_along() 除了当传递长度为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

6
diag也一样
flodel 2012年

有没有其他选择sample()或只是使用as.numeric(sample(as.character(c)))
user1317221_G 2012年

6
@ user1317221_G-我刚刚使用过这种想法:safeSample <- function(x) if(length(x) == 1) x else sample(x)。(尝试一下safeSample(4:5); safeSample(5)。)
Josh O'Brien

感叹那一个悲伤的时刻,当一个用户发布了您正在搜索的所有答案并且您需要等待2天才能进行投票时,因为担心串行
投票

@BhargavRao哈哈。感谢您的赞美;)
Josh O'Brien

26

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

如果输入是日期向量,我们也会看到差异

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

6
这个日期的例子很棒!
里卡多·萨波特塔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.