2013-02-15 3 views
7

Cela peut être redondant mais je n'ai pas trouvé de question similaire sur SO.R raccourci pour obtenir les n dernières entrées dans un vecteur

Y at-il un raccourci pour obtenir les derniers n éléments/entrées dans un vecteur ou un tableau sans utiliser la longueur du vecteur dans le calcul?

foo <- 1:23

> foo 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 

Disons que l'on veut les 7 dernières entités, je veux éviter cette syntaxe lourde:

> foo[(length(foo)-6):length(foo)] 
[1] 17 18 19 20 21 22 23 

Python a foo[-7:]. Y a-t-il quelque chose de similaire dans R? Merci!

Répondre

13

Vous voulez que la fonction tail

foo <- 1:23 
tail(foo, 5) 
#[1] 19 20 21 22 23 
tail(foo, 7) 
#[1] 17 18 19 20 21 22 23 
x <- 1:3 
# If you ask for more than is currently in the vector it just 
# returns the vector itself. 
tail(x, 5) 
#[1] 1 2 3 

Avec head il y a des moyens faciles à saisir tout sauf les derniers/n premiers éléments d'un vecteur aussi bien.

x <- 1:10 
# Grab everything except the first element 
tail(x, -1) 
#[1] 2 3 4 5 6 7 8 9 10 
# Grab everything except the last element 
head(x, -1) 
#[1] 1 2 3 4 5 6 7 8 9 
+5

Plus un et a voulu noter les propriétés d'index négatif gentil de 'tail' et' head' pour les futurs chercheurs. Vous pouvez dire "Donnez-moi tout sauf les n derniers éléments/lignes" comme wel: 'head (foo, -2)' –

+1

@TylerRinker Bon point - c'est une bonne information et je l'ai ajouté à la réponse. – Dason

3

Pas une bonne idée quand vous avez la fonction de queue impressionnante, mais voici une alternative:

n <- 3 
rev(rev(foo)[1:n]) 

Je me prépare pour les votes vers le bas.

+0

+1 pour une utilisation intelligente de 'rev'. Évite aussi d'utiliser la longueur (foo). Pourquoi ne peut-on pas utiliser 'len' au lieu de' length 'comme Python ?! Enregistre 50% de frappe. – harkmug

+0

J'aime le premier, mais le second était explicitement ce qu'ils essayaient d'éviter dans la question originale. – Dason

+0

@Dason bon point Je l'ai enlevé car l'affiche indique explicitement leur dédain pour la longueur. –

Questions connexes