假设我有一个向量v
,我如何得到它的反向,即最后一个元素?
我遇到的第一件事是v[length(v):1]
,但是当v
为numeric(0)
时它返回NA,而用户通常期望排序什么也不返回任何内容,没有排序什么都不返回不可用的东西 - 它确实对我的情况有很大影响。
答案 0 :(得分:70)
你快到了; 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
}。如果as.logical(x)
为0,则FALSE
为x
,而对于任何其他数字,TRUE
会发生if (length(x))
。
因此,x
精确测试你想要的东西 - length(x):1L
长度为零。如果不是,则{{1}}具有理想的效果,否则不需要反转任何内容,正如@floder在评论中所解释的那样。