假设我有一个向量v
,我如何得到它的反向,即最后一个元素?
来到我的第一件事是v[length(v):1]
,但它在v
is时返回 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
。x
TRUE
因此,if (length(x))
精确测试您想要x
的 - 长度是否为零。如果不是,length(x):1L
则具有理想的效果,否则无需反转任何内容,正如@floder 在评论中所解释的那样。