seq
lower == upper - 1
函数的“聪明”不止一次在我的角落里遇到了严重的打击。
> 1:0
[1] 1 0
> seq(1, 0)
[1] 1 0
> seq(1, 0, 1)
Error in seq.default(1, 0, 1) : wrong sign in 'by' argument
我不是要问这种奇怪行为的原因 - 我认为它现在只是我们必须忍受的遗产。相反,我想知道在这种情况下是否有任何包实现了一个返回空序列的seq
运算符,如下所示:
safe.seq.int <- function(from, to, by=1) {
if (from > to) integer(0) else seq.int(from, to, by)
}
> safe.seq.int(1, 0)
integer(0)
答案 0 :(得分:14)
出于这个原因,最好使用seq_len(n)
而不是1:n
- 如果n=0
则会得到一个空序列而不是c(1,0)
。
希望这有帮助
答案 1 :(得分:4)
非常不幸的是:operator和seq()函数都无法处理这种情况。到目前为止,我找到的最佳答案如下:
seq(a,b,length = max(0,b-a+1))