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 v
numeric(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.
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.