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.
Given a vector, reverse this vector using STL in C++. Approach: Reversing can be done with the help of reverse() function provided in STL.
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.
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.
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).
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With