Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to reverse order a vector?

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 returns NA when v is numeric(0), while user normally expect sorting nothing returns nothing, not sorting nothing returns the unavailable thing - it does make a big difference in my case.

like image 228
Tankman六四 Avatar asked Sep 21 '13 13:09

Tankman六四


People also ask

Can you reverse vectors?

Given a vector, reverse this vector using STL in C++. Approach: Reversing can be done with the help of reverse() function provided in STL.

How do I reverse the order of an array in R?

The rev() method in R is used to return the reversed order of the R object, be it dataframe or a vector. It computes the reverse columns by default. The resultant dataframe returns the last column first followed by the previous columns. The ordering of the rows remains unmodified.

How do you reverse a 2D vector?

To reverse the columns of a 2D vector, we need to traverse through the vector row-wise and reverse elements of each row. v. size() returns the number of rows in the 2D vector.

How do I reverse the order of numbers in R?

To create reverse of a number, we can use stri_reverse function of stringi package. For example, if we have a vector called x that contain some numbers then the reverse of these numbers will be generated by using the command stri_reverse(x).


1 Answers

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.

like image 98
Julius Vainora Avatar answered Sep 30 '22 13:09

Julius Vainora