web-dev-qa-db-ja.com

ベクトルを逆順にする方法は?

ベクトルvがあると仮定すると、その逆、つまり最後の要素を最初に取得するにはどうすればよいですか?

私に最初に来るのはv[length(v):1]ですが、vnumeric(0)の場合はNAを返しますが、ユーザーは通常、何もソートしないと何も返されず、何もソートしないと返されます利用できないもの-それは私の場合に大きな違いを生みます。

48
Tankman六四

あなたはほとんどそこにいます。 revは必要なことを行います:

_rev(1:3)
# [1] 3 2 1
rev(numeric(0))
# numeric(0)
_

その理由は次のとおりです。

_rev.default
# function (x) 
# if (length(x)) x[length(x):1L] else x
# <bytecode: 0x0b5c6184>
# <environment: namespace:base>
_

numeric(0)の場合、length(x)は0を返します。ifは論理条件を必要とするため、length(x)TRUEに強制します。またはFALSEFALSEが0で、それ以外の数値の場合はxの場合、as.logical(x)TRUEになります。

したがって、if (length(x))は、xの長さがゼロかどうかを正確にテストします。そうでない場合は、length(x):1Lが望ましい効果をもたらします。そうでない場合は、@ floderがコメントで説明したように、何も逆にする必要はありません。

71
Julius Vainora