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

: 演算子と seq() 関数の両方がこのケースを処理できないのは非常に残念です。私がこれまでに見つけた最良の答えは次のとおりです。

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