web-dev-qa-db-de.com

Wie kann man einen Vektor umkehren?

Angenommen, ich habe einen Vektor v, wie erhalte ich die Umkehrung, d. H. Das letzte Element zuerst?

Das erste, was mir einfällt, ist v[length(v):1], aber es gibt NA zurück, wenn vnumeric(0) ist, während Benutzer normalerweise erwarten, dass das Sortieren von nichts nichts zurückgibt nicht verfügbare Sache - es macht einen großen Unterschied in meinem Fall.

48
Tankman六四

Du bist fast am Ziel; rev macht was Sie brauchen:

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

Hier ist der Grund:

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

Im Fall von numeric(0) gibt length(x) 0 zurück. Da if eine logische Bedingung erfordert, zwingt es length(x) zu TRUE oder FALSE. Es kommt vor, dass as.logical(x)FALSE ist, wenn x 0 ist und TRUE für eine beliebige andere Zahl.

Somit testet if (length(x)) genau, was Sie wollen - ob x die Länge Null hat. Wenn dies nicht der Fall ist, hat length(x):1L einen wünschenswerten Effekt, und ansonsten besteht keine Notwendigkeit, etwas umzukehren, wie @floder im Kommentar erläutert hat.

71
Julius Vainora