如何逆序向量?

Tan*_*n六四 50 sorting reverse r vector

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

我遇到的第一件事是v[length(v):1],但是当它vnumeric(0),当它返回NA时,用户通常期望排序什么都不返回任何东西,没有排序什么都不会返回不可用的东西 - 它确实在我的情况下产生了很大的不同.

Jul*_*ora 74

你快到了; rev做你需要的:

rev(1:3)
# [1] 3 2 1
rev(numeric(0))
# numeric(0)
Run Code Online (Sandbox Code Playgroud)

原因如下:

rev.default
# function (x) 
# if (length(x)) x[length(x):1L] else x
# <bytecode: 0x0b5c6184>
# <environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)

在这种情况下numeric(0),length(x)返回0.由于if需要一个逻辑条件,它强制length(x)TRUEFALSE.它发生as.logical(x)FALSE时候x是0和TRUE任何其他号码.

因此,if (length(x))精确测试你想要的东西 - 是否x长度为零.如果不是,length(x):1L则具有理想的效果,否则就不需要反转任何内容,正如@floder在评论中解释的那样.

  • +1 - 只是为了解释在`v < - c()`:`length(v):1`是'0:1`的情况下OP发生了什么.```运算符忽略`0`并返回`v [1]`,即`NA`.如果它不是"rev",那么强大的东西和OP的界限就是`v [seq(to = 1,by = -1,length.out = length(v))]`. (3认同)