【问题标题】:How to reverse order a vector?如何反转向量的顺序?
【发布时间】:2013-09-26 19:49:17
【问题描述】:

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

我首先想到的是v[length(v):1],但是当vnumeric(0) 时它返回NA,而用户通常期望排序什么都不返回,不排序返回不可用的东西——它确实很重要我的情况有所不同。

【问题讨论】:

    标签: r sorting vector reverse


    【解决方案1】:

    你快到了; 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)FALSE,而x 是0,TRUE 是任何其他数字。

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

    【讨论】:

    • +1 - 只是为了解释在 v &lt;- c(): length(v):10:1 的情况下 OP 发生了什么。 [ 运算符忽略 0 并返回 v[1],即 NA。如果不是rev,那么健壮且符合 OP 的内容将是 v[seq(to = 1, by = -1, length.out = length(v))]
    猜你喜欢
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2021-11-17
    • 1970-01-01
    • 2012-02-11
    相关资源
    最近更新 更多