Каковы примеры того, когда seq along работает, но seq дает непреднамеренные результаты?
каковы хорошие примеры того, когда seq_along
будет работать, но seq
приведет к непреднамеренным результатам?
из документации ?seq
у нас есть:
обратите внимание, что он отправляет на класс первый аргумент независимо от имен аргументов. Это может иметь непредвиденные последствия если он вызывается только с одним аргументом, предполагающим, что это будет принято как вдоль.С: в этом случае гораздо лучше использовать seg_along.
2 ответов
это должно прояснить разницу. В основном, 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
если вход в 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