How to reverse order a vector?

后端 未结 1 1141
北恋
北恋 2020-12-05 09:21

Suppose I have a vector v, how do I get its reverse, i.e. last element first?

The first thing that comes to me is v[length(v):1], but it re

相关标签:
1条回答
  • 2020-12-05 10:10

    You are almost there; rev does what you need:

    rev(1:3)
    # [1] 3 2 1
    rev(numeric(0))
    # numeric(0)
    

    Here's why:

    rev.default
    # function (x) 
    # if (length(x)) x[length(x):1L] else x
    # <bytecode: 0x0b5c6184>
    # <environment: namespace:base>
    

    In the case of numeric(0), length(x) returns 0. As if requires a logical condition, it coerces length(x) to TRUE or FALSE. It happens that as.logical(x) is FALSE when x is 0 and TRUE for any other number.

    Thus, if (length(x)) tests precisely what you want - whether x is of length zero. If it isn't, length(x):1L has a desirable effect, and otherwise there is no need to reverse anything, as @floder has explained in the comment.

    0 讨论(0)
提交回复
热议问题