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)到TRUE或FALSE.它发生as.logical(x)的FALSE时候x是0和TRUE任何其他号码.
因此,if (length(x))精确测试你想要的东西 - 是否x长度为零.如果不是,length(x):1L则具有理想的效果,否则就不需要反转任何内容,正如@floder在评论中解释的那样.