Comment inverser l'ordre d'un vecteur?

supposons que j'ai un vecteur v, comment obtenir son inverse, c'est-à-dire le dernier élément en premier?

La première chose qui me vient, c'est v[length(v):1], mais il renvoie NA vnumeric(0), alors que l'utilisateur s'attend normalement à ce que le tri rien ne retourne rien, le fait de ne pas trier rien renvoie la chose non disponible - Cela fait une grande différence dans mon cas.

41
demandé sur smci 2013-09-21 17:58:37

1 réponses

Vous y êtes presque; rev est-ce que vous avez besoin de:

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

Voici pourquoi:

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

Dans le cas de numeric(0),length(x) renvoie 0. if nécessite une condition logique, il plie length(x)TRUE ou FALSE. Il arrive que as.logical(x)FALSE quand x 0 et TRUE pour tout autre nombre.

ainsi,if (length(x)) teste précisément ce que vous voulez-si x est de longueur zéro. Si elle n'est pas, length(x):1L a un souhaitable il n'est pas nécessaire d'Inverser quoi que ce soit, comme @floder l'a expliqué dans le commentaire.

62
répondu Julius Vainora 2018-08-20 16:57:34