Wie extrahiere ich die Werte von der einheitlichen Liste in R?
Zum Beispiel, wie bekomme ich einen Vektor der einzelnen und jede person, die das Alter in die Liste people
unten:
> people = vector("list", 5)
> people[[1]] = c(name="Paul", age=23)
> people[[2]] = c(name="Peter", age=35)
> people[[3]] = c(name="Sam", age=20)
> people[[4]] = c(name="Lyle", age=31)
> people[[5]] = c(name="Fred", age=26)
> ages = ???
> ages
[1] 23 35 20 31 26
Gibt es ein äquivalent eines Python list comprehension oder etwas, um den gleichen Effekt?
InformationsquelleAutor c00kiemonster | 2011-08-02
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie sapply:
Angesichts der Daten-Struktur, die Sie zur Verfügung gestellt, die ich benutzen würde
sapply
:Allerdings werden Sie feststellen, dass die Ergebnisse dieser sind Zeichendaten.
Ein Ansatz wäre, zu zwingen, zu
as.numeric()
oderas.integer()
im Aufruf sapply.Alternativ - wenn Sie Flexibilität, wie Sie speichern die Daten in den ersten Platz, kann es sinnvoll sein, speichern Sie es als eine Liste von
data.frame
s:Wenn du gehst, so weit zu gehen, können Sie auch wollen, betrachten Sie ein single-Daten.Rahmen für alle Ihre Daten:
Kann es einige andere Grund, warum Sie nicht der Meinung dieser Ansatz das erste mal um, aber...
sapply(people, "[", 2)
.?'['
.[[
und$
diskutiert es auch.[
ist eine Funktion; Typ?"["
für mehr. So können Sie die 'extract element-Funktion' auf jedes element derpeople
.2
ist als ein zusätzliches argument übergeben, um[
über...
imsapply
.sapply(people,'[','age')
.Ausgabe:
Alternativ zu den
apply
-Familie gibt es @Hadley ' spurrr
- Paket bietet diemap_
-Funktionen für diese Art von job.(Es gibt ein paar Unterschiede zu den
apply
-Familie diskutierten zum Beispiel hier.)OPs Beispiel:
Den
sapply
Ansatz:Und die
map
Ansatz:Natürlich sind Sie identisch:
Aber diese Frage ist ziemlich alt, ich würde gerne meine Annäherung an diese. Es ist durchaus möglich, zu tun mit der
sapply
alstflutre vorgeschlagen. Aber ich finde es intuitiver mithilfe der
unlist
Funktion:Hier
unlist(people, use.names = F)
Erträgeund schneiden wir, dass Sie durch jedes andere element mit
seq
Befehl.