Par exemple, comment puis-je obtenir un vecteur de chaque personne de chaque personne dans la liste y a-t-il un équivalent d'une liste de python compréhension ou quelque chose au même effet? p> p> personnes code> ci-dessous:
5 Réponses :
Vous pouvez utiliser Sapply :
> sapply(people, function(x){as.numeric(x[2])}) [1] 23 35 20 31 26
FacePalms i> J'ai totalement ignoré les choses * Appliquer ... Très serviable. Merci.
Compte tenu de la structure de données que vous avez fournie, j'utiliserais Cependant, vous remarquerez que les résultats de ceci sont des données de caractères. p> une approche serait de coercer à Alternativement - si vous avez une flexibilité sur la manière dont vous stockez les données en premier lieu, il peut être logique de le stocker comme une liste de sapply code>:
as.numeric () code> ou
as.Integer () code> dans l'appel Sapply. p>
data.frame code> s: P>
people2 <- data.frame(name = c("Paul", "Peter", "Sam", "Lyle", "Fred")
, age = c(23,35,20,31, 26))
Oui dans cet exemple simple, une image de données est probablement meilleure. Mais l'exemple "réel" est beaucoup plus compliqué afin qu'une liste soit meilleure. Merci quand même
@ c00kie - c'est ce que j'ai pensé, mais parfois il est facile de négliger l'apparemment évident :)
+1 Pour les conseils sur R-ISH, plutôt que des structures de données pythoniques. En outre, juste parce que je pense que c'est tifty: sapply (personnes, "[", 2) code>.
@Joran, qu'est-ce que le "[" a fait dans l'appel saphi? J'ai déjà vu cette notation avant, mais je ne me souviens pas vraiment d'où ...
@ C00kie - [ code> est utilisé comme outil d'indexation. La page d'aide est assez utile et a de bonnes informations dedans
? '[' Code>.
[[ code> et
$ code> y sont également discutés.
Donc [ code> est une fonction; Tapez
? "[" code> pour plus. Vous pouvez donc appliquer la «fonction d'élément extrait» à chaque élément de
personnes code>.
2 code> est transmis comme un argument supplémentaire à
[ code> via
... code> dans
sapply code>.
+1 à la méthode de @ Joran. Une autre option est sapply (personnes, '[', 'Âge') code>.
ages <- sapply(1:length(people), function(i) as.numeric(people[[i]][[2]])) ages Output: [1] 23 35 20 31 26
Alternativement au (il y a quelques différences pour le Exemple ops: p> et la carte bien sûr, ils sont identiques: p> Appliquer code> -Family Il y a @ haref="http://purrr.tidyveryver.org/" rel="nofollow noreferrer">
Purrr code> Package qui offre la carte
_ code> -fonctions pour ce type de travail.
appliquer code> -Family discuté par exemple ici .) P>
SAPPLY code> Approche: P>
approche: p>
identical(ages_sapply, ages_map)
[1] TRUE
Bien que cette question soit assez ancienne, j'aimerais partager mon approche à ce sujet. Il est certainement possible de faire avec le Notez la multiplication par ici et nous tranche que par tous les autres éléments utilisant sapply code> comme
Tflutre suggérées. Mais je trouve plus intuitif en utilisant la fonction
non tuniste code>:
2 * Longueur (personnes) code>, il existe deux éléments stockés dans la liste
pople code>. Cela peut être rendu plus générique en écrivant
longueur (personnes [[1]]) * longueur (personnes) code> p>
blockQuote>
irréaliste (personnes, utilisation.names = f) code> rendements p>
SEQ code> commande. p> p>