10

R 函数的“聪明”不止一次在极端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)
4

2 回答 2

14

出于这个原因,使用seq_len(n)而不是一个很好的做法 - 如果你得到一个空序列而不是.1:nn=0c(1,0)

希望这可以帮助

于 2012-06-06T21:20:19.447 回答
7

非常不幸的是 : operator 和 seq() 函数都无法处理这种情况。到目前为止,我找到的最佳答案如下:

seq(a,b,length = max(0,b-a+1))
于 2015-07-10T08:49:00.180 回答