假设我有一个向量v,我如何得到它的反向,即最后一个元素?
来到我的第一件事是v[length(v):1],但它在vis时返回 NA numeric(0),而用户通常期望 sort nothing 返回任何内容,而不是 sort nothing 返回不可用的东西 - 这对我来说确实有很大的不同。
你快到了;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。xTRUE
因此,if (length(x))精确测试您想要x的 - 长度是否为零。如果不是,length(x):1L则具有理想的效果,否则无需反转任何内容,正如@floder 在评论中所解释的那样。