假设我有一个向量v
,我如何得到它的反转,即最后一个元素在前?
我首先想到的是v[length(v):1]
,但是当v
为numeric(0)
时,它返回NA,而用户通常期望排序nothing不返回任何东西,而不是排序nothing返回不可用的东西-这在我的情况下确实有很大的不同。
发布于 2013-09-21 14:06:40
您就快成功了;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
,而对于任何其他数字,则为TRUE
。
因此,if (length(x))
会精确地测试您想要的内容-- x
的长度是否为零。如果不是,length(x):1L
就有一个理想的效果,否则就不需要逆转任何东西,就像@floder在评论中解释的那样。
https://stackoverflow.com/questions/18933441
复制