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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.