如果lower大于上限,则创建空序列的序列构造

krl*_*mlr 10 r sequence

seq在以下情况下,R的功能的"聪明"不止一次严重打击了我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
Run Code Online (Sandbox Code Playgroud)

我不是要问这种奇怪行为的原因 - 我认为它现在只是我们必须忍受的遗产.相反,我想知道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)
Run Code Online (Sandbox Code Playgroud)

Tim*_*m P 14

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

希望这可以帮助


Ash*_*Ash 5

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

seq(a,b,length = max(0,b-a+1))
Run Code Online (Sandbox Code Playgroud)