如何逆序向量?

假设我有一个向量 v,我如何得到它的反向,即最后一个元素第一?

我想到的第一件事是 v[length(v):1],但是当 vnumeric(0)时,它返回 NA,而用户通常期望排序什么也不返回,不排序什么也不返回不可用的东西——这对我的情况确实有很大的不同。

91917 次浏览

你就快到了; 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)TRUEFALSE。当 x为0时,as.logical(x)FALSE,其他数字为 TRUE

因此,if (length(x))精确地测试您想要的东西—— x是否为零长度。如果不是,那么 length(x):1L有一个令人满意的效果,否则就没有必要逆转任何东西,正如@floder 在评论中解释的那样。