74

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

来到我的第一件事是v[length(v):1],但它在vis时返回 NA numeric(0),而用户通常期望 sort nothing 返回任何内容,而不是 sort nothing 返回不可用的东西 - 这对我来说确实有很大的不同。

4

1 回答 1

112

你快到了;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。碰巧as.logical(x)是0 和任何其他数字FALSExTRUE

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

于 2013-09-21T14:06:39.893 回答