366 Stimmen

Wie kann ich ein Element aus einer Liste entfernen?

Ich habe eine Liste, aus der ich ein einzelnes Element entfernen möchte. Wie kann ich das tun?

Ich habe versucht, im Referenzhandbuch nachzuschlagen, welche Namen für diese Funktion naheliegend wären, aber ich habe nichts Passendes gefunden.

298voto

Florian Jenn Punkte 4841

Wenn Sie die Liste nicht an Ort und Stelle ändern wollen (z. B. um die Liste mit einem entfernten Element an eine Funktion zu übergeben), können Sie die Indizierung verwenden: negative Indizes bedeuten "dieses Element nicht einschließen".

x <- list("a", "b", "c", "d", "e"); # example list

x[-2];       # without 2nd element

x[-c(2, 3)]; # without 2nd and 3rd

Auch logische Index-Vektoren sind nützlich:

x[x != "b"]; # without elements that are "b"

Dies funktioniert auch mit Datenrahmen:

df <- data.frame(number = 1:5, name = letters[1:5])

df[df$name != "b", ];     # rows without "b"

df[df$number %% 2 == 1, ] # rows with odd numbers only

252voto

Chad Birch Punkte 70946

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:

Ich finde keine explizite Dokumentation für R, wie man Elemente aus Listen entfernt, aber Versuch und Irrtum sagen mir

myList[[5]] <- NULL

entfernt das 5. Element und "schließt" dann das durch die Löschung dieses Elements entstandene Loch. Dadurch werden die Indexwerte verfälscht, so dass ich beim Löschen von Elementen vorsichtig sein muss. Ich muss von hinten nach vorne in der Liste arbeiten.

A Antwort auf diesen Beitrag weiter unten in diesem Thema Staaten:

Zum Löschen eines Elements einer Liste, siehe R FAQ 7.1

Und die Der entsprechende Abschnitt der R-FAQ sagt:

... Setzen Sie x[i] oder x[[i]] nicht auf NULL, denn dadurch wird die entsprechende Komponente aus der Liste entfernt.

Das scheint Ihnen (auf eine etwas verkehrte Weise) zu sagen, wie Sie ein Element entfernen können.

Ich hoffe, das hilft, oder führt Sie zumindest in die richtige Richtung.

70voto

Kim Punkte 3383

Ich möchte hinzufügen, dass, wenn es sich um eine benannte Liste können Sie einfach verwenden within .

l <- list(a = 1, b = 2)    
> within(l, rm(a))
$b
[1] 2

So können Sie die ursprüngliche Liste überschreiben

l <- within(l, rm(a)) 

um das Element namens a aus Liste l .

40voto

Aleksandr Levchuk Punkte 4031

So entfernen Sie das letzte Element einer Liste in R:

x <- list("a", "b", "c", "d", "e")
x[length(x)] <- NULL

Wenn x ein Vektor sein könnte, müssten Sie ein neues Objekt erstellen:

x <- c("a", "b", "c", "d", "e")
x <- x[-length(x)]
  • Arbeit für Listen y Vektoren

23voto

Sukhi Punkte 766

Entfernen von Nullelementen aus einer Liste in einer einzigen Zeile :

x=x[-(which(sapply(x,is.null),arr.ind=TRUE))]

Prost

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X