2016-04-24 7 views
1

Sagen Sie eine Reihe von Objekten in der R-Umgebung haben, wie zum Beispiel:Wie wende ich eine Liste von Argumentwerten an eine Funktion in R an?

a <- 4 
b <- 3 
c <- 2 
aa <- 2 
bb <- 6 
cc <- 9 

sagen Nun würden Sie die Objekte in Ihrer Umgebung entfernen möchte, die mit den Buchstaben ‚a‘ genannt werden oder ‚b‘. Dies kann mit

rm(list = ls(pattern = "a")) 
rm(list = ls(pattern = "b")) 

jedoch erreicht werden, vorstellen, auf einem viel größeren Maßstab versucht, dieses Problem zu lösen, wo Sie alle Objekte, deren Werte in einer Liste angezeigt entfernen mögen, wie:

custom <- list("a", "b") 

Wie Wende ich diese Liste als ein 'geloopt' Argument an die ls() Funktion an?

Ich habe experimentiert mit:

rm(lapply(custom, function(x) ls(pattern = x))) 

Aber dies scheint nicht, etwas zu tun.

Das fühlt sich wie ein weit verbreitetes Problem an, also befürchte ich, dass es anderswo auf Stackoverflow eine Antwort auf dieses Problem gibt. Leider konnte ich es nicht finden.

+1

schlagen vor, diese Frage mit weniger einfach replizierbaren Namen zu bearbeiten, damit nicht versehentlich andere Objekte aus ihren Umgebungen mit dem Buchstaben a oder b gelöscht werden. – dww

Antwort

2

Option 1: Dies ist ein vektorisierter Ansatz. Fügen Sie die custom Liste zusammen mit einem "oder" Regex-Trennzeichen (|) ein und übergeben Sie es an pattern.

rm(list = ls(pattern = paste(custom, collapse = "|"))) 

Option 2: Wenn Sie noch verwenden möchten lapply(), würden Sie das envir Argument sowohl ls() und rm() seit lapply() selbst bildet eine lokale Umgebung umfassen müssen. Und Sie möchten auch rm() innerhalb der Anruf setzen.

0

Vielleicht grep wird Ihr Problem lösen:

rm(list=grep("^[ab]$", ls(), value=T)) 

Objekte a und b entfernen, aber sonst nichts.

werden die Objekte a, aa, b und bb entfernt, aber lassen c und cc in der Umgebung.

1

kann ich hinzugefügt Test mit einer Schleife leicht genug

test.a <- 4 
test.b <- 3 
test.c <- 2 
test.aa <- 2 
test.bb <- 6 
test.cc <- 9 

custom <- c("test.a", "test.b") 
for (x in custom) rm(list = ls(pattern = x)) 

NB erfolgen. an den Anfang der Objektnamen, um ein Durcheinander mit der Umgebung zu vermeiden, wenn sie diesen Code ausführen. Wir möchten nicht unbeabsichtigt die tatsächlichen Objekte der Leute löschen, die a oder b usw. genannt werden.

Verwandte Themen