Wählen Sie mehrere Elemente aus einer Liste aus

83

Ich habe eine Liste in R, die ungefähr 10.000 Elemente lang ist. Angenommen, ich möchte nur die Elemente 5, 7 und 9 auswählen. Ich bin mir nicht sicher, wie ich das ohne eine for-Schleife tun würde.

Ich möchte so etwas machen, mylist[[c(5,7,9]]aber das funktioniert nicht. Ich habe die lapplyFunktion auch ausprobiert , konnte sie aber auch nicht zum Laufen bringen.

user1357015
quelle
18
Aus der Dokumentation an ?"[[": Der wichtigste Unterschied zwischen [, [[und $ist , dass die [mehr als ein Element auswählen kann , während die anderen beiden ein einzelnes Element auswählen.
A5C1D2H2I1M1N2O1R2T1
1
Nach @ mrdwabs Kommentar, da dies die vektorisierte Welt von R ist, kann "ein einzelnes Element" ein Vektor sein!
Seancarmody

Antworten:

138

mylist[c(5,7,9)] Sollte es tun.

Sie möchten, dass die Unterlisten als Unterlisten der Ergebnisliste zurückgegeben werden. Sie verwenden dafür nicht [[]](oder besser gesagt, die Funktion ist es [[) - wie Dason in Kommentaren erwähnt, [[greift er nach dem Element.

Glen_b
quelle
8
Nur um weitere Details hinzuzufügen - "[" gibt eine Unterliste zurück, sodass es sinnvoll ist, mehrere Eingaben damit zu verwenden. "[[" greift tatsächlich auf das Element selbst zu, sodass nur eine einzige Eingabe möglich ist, da keine Liste zurückgegeben wird (es sei denn, das Element selbst ist eine Liste).
Dason
Ist das vektorisiert? Ich habe zwei Listen: benthält 10 Millionen Elemente. filter_binsist eine Liste, in der jedes Element ein Index ist. Um also nur Elemente bmit demselben Index zu erhalten, muss lapply(filter_bins, function(x) b[x, ]) b [x,] nur eine Teilmenge der Zeilen zurückgeben (wobei jedes Element von filter_bins ausgewählt wird). Ich hoffe, dies ist sinnvoll. Meine Frage ist, dass dies sehr langsam ist
Masfenix
@masfenix Sie sollten eine neue Frage generieren, die die Details beschreibt.
Glen_b
Kann die obige Lösung mit etwas wie dplyr :: select () durchgeführt werden und enthält ('etwas Text ")?
Verfallen
3
@HermanToothrot Das tust du nicht. Zumindest nicht direkt. Sie können die Indizes, die Sie extrahieren möchten, überlappen oder überlagern und iterativ das entsprechende Element mit greifen [[. Aber wenn Sie mehrere Elemente extrahieren möchten, dann greifen Sie wirklich zu einer Unterliste und sollten einfach[
Dason