假设我有一个向量v
,我如何得到它的倒数,即最后一个元素优先?
我首先想到的是v[length(v):1]
,但当v
为numeric(0)
时,它返回NA,而用户通常希望排序不返回任何内容,而不排序不返回不可用的内容——在我的情况下,这确实会产生很大的不同.
假设我有一个向量v
,我如何得到它的倒数,即最后一个元素优先?
我首先想到的是v[length(v):1]
,但当v
为numeric(0)
时,它返回NA,而用户通常希望排序不返回任何内容,而不排序不返回不可用的内容——在我的情况下,这确实会产生很大的不同.
你就快到了;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
或FALSE
.当x
为0时,as.logical(x)
为FALSE
,而对于任何其他数字,as.logical(x)
为TRUE
.
因此,if (length(x))
次测试正好是你想要的——x
的长度是否为零.如果不是,length(x):1L
有一个理想的效果,否则就没有必要逆转任何东西,正如@floder在 comments 中解释的那样.