Ich habe eine Liste und möchte ein einzelnes Element daraus entfernen. Wie kann ich das machen?
Ich habe versucht nachzuschlagen, was meiner Meinung nach die offensichtlichen Namen für diese Funktion im Referenzhandbuch sind, und ich habe nichts Passendes gefunden.
Antworten:
Ich kenne R überhaupt nicht, aber ein bisschen kreatives Googeln hat mich hierher geführt: http://tolstoy.newcastle.edu.au/R/help/05/04/1919.html
Das Schlüsselzitat von dort:
Eine Antwort auf diesen Beitrag später im Thread lautet:
Und der relevante Abschnitt der R-FAQ lautet:
Was Ihnen (etwas rückwärts) zu sagen scheint, wie Sie ein Element entfernen können.
Hoffe das hilft oder führt dich zumindest in die richtige Richtung.
quelle
Error in list[length(list)] <- NULL : replacement has length zero
Wenn Sie die Liste nicht direkt ändern möchten (z. B. um die Liste mit einem an eine Funktion entfernten Element zu übergeben), können Sie die Indizierung verwenden: Negative Indizes bedeuten "Dieses Element nicht einschließen".
Auch logische Indexvektoren sind nützlich:
Dies funktioniert auch mit Datenrahmen:
quelle
x$b
diese Weise entfernen noch "b" aus einem Listenelement entfernenx[[2]] = c("b","k")
.%in%
zum Testen mehrerer Elemente verwenden. Ich bin mir nicht sicher, was Sie unter "x $ b kann nicht entfernt werden" verstehen - meinen Sie das Entfernen der gesamten Spalteb
?So entfernen Sie das letzte Element einer Liste in R:
Wenn x ein Vektor sein könnte, müssten Sie ein neues Objekt erstellen:
quelle
Entfernen von Null-Elementen aus einer einzeiligen Liste:
x=x[-(which(sapply(x,is.null),arr.ind=TRUE))]
Prost
quelle
x
eine leere Liste vorliegt . Verwendencompact
vonplyr
für diese Aufgabe statt.-(which(sapply(x,is.null),arr.ind=TRUE))
zurückgegeben,named integer(0)
wodurch diese Zeile vollständig gelöscht wird.Ich möchte hinzufügen, dass Sie, wenn es sich um eine benannte Liste handelt , diese einfach verwenden können
within
.So können Sie die ursprüngliche Liste überschreiben
um das benannte Element
a
aus der Liste zu entfernenl
.quelle
within(l, rm(a, b))
Wenn Sie eine benannte Liste haben und ein bestimmtes Element entfernen möchten, können Sie Folgendes versuchen:
Dadurch wird eine Liste machen
lst
mit Elementena
,b
,c
. In der zweiten Zeile wird das Element entfernt,b
nachdem überprüft wurde, ob es vorhanden ist (um das erwähnte Problem @hjv zu vermeiden).oder besser:
Auf diese Weise ist es kein Problem , zu versuchen , ein nicht vorhandenes Element zu löschen (zB
lst$g <- NULL
)quelle
Es gibt das rlist-Paket ( http://cran.r-project.org/web/packages/rlist/index.html ), das sich mit verschiedenen Arten von Listenoperationen befasst .
Beispiel ( http://cran.r-project.org/web/packages/rlist/vignettes/Filtering.html ):
Ergebnisse in:
quelle
Ich weiß nicht, ob Sie noch eine Antwort darauf benötigen, aber ich habe aus meiner begrenzten Erfahrung (3 Wochen Autodidakt R) mit R herausgefunden, dass die Verwendung der
NULL
Aufgabe tatsächlich falsch oder nicht optimal ist, insbesondere wenn Sie dynamisch aktualisieren eine Liste in so etwas wie einer for-Schleife.Genauer gesagt mit
wird den Fehler werfen
oder
Was ich als konsequenter empfand, ist
quelle
[[-5]]
sich um einzelne eckige Klammern handeln sollte, da Sie sonst nur den Inhalt dieses Listenelements abwählen, nicht das Element selbst. Nun, zumindest die Verwendung von doppelten eckigen Klammern gibt mir den Fehler: "Versuch, mehr als ein Element auszuwählen". Was für mich funktioniert war dann :myList <- myList[-5]
.Ich wollte nur schnell hinzufügen (weil ich es in keiner der Antworten gesehen habe), dass Sie für eine benannte Liste auch tun können
l["name"] <- NULL
. Zum Beispiel:quelle
Verwenden Sie
-
(negatives Vorzeichen) zusammen mit der Position des Elements. Wenn das dritte Element entfernt werden soll, verwenden Sie es alsyour_list[-3]
Eingang
Entfernen Sie ein einzelnes Element aus der Liste
Entfernen Sie mehrere Elemente aus der Liste
quelle
Bei benannten Listen finde ich diese Hilfsfunktionen nützlich
quelle
Mit lapply und grep:
quelle
Wie wäre es damit? Wieder mit Indizes
oder
quelle
m[1:(length(m) - 1)]
Wenn Sie numerische Indizes vermeiden möchten, können Sie verwenden
Namen
namea...namen
aus a löschen . Dies funktioniert für Listensowie für Vektoren
quelle
Sie können verwenden
which
.quelle
list