Какие существуют примеры, когда сл вместе работает, но далее выдает неожиданные результаты?
какие хорошие примеры, когда 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