2016-05-27 10 views
-3

Ich möchte einige data.frames aus dem Speicher entfernen. Das funktioniert gut mitremove() via lapply funktioniert nicht

remove(ttest,inherits=T) 

Nun will ich nicht, dass ich für jedes Datum schreiben verwendet, so dachte ich über lapply mit:

lapply(tablenames,remove) 

wo Tabellennamen sind nur eine Liste mit den Tabellennamen in es:

tablenames 

[[1]] 
[1] ttest 
Levels: testsheet ttest ttest2 

[[2]] 
[1] testsheet 
Levels: testsheet ttest ttest2 

[[3]] 
[1] ttest2 
Levels: testsheet ttest ttest2 

bekomme ich immer einen Fehler zurück:

Error in FUN(X[[i]], ...) : ... muss Namen oder Zeichenketten enthalten

was bedeutet "muss Name oder Zeichenfolge enthalten".

Weiter habe ich versucht, die Funktion remove in eine andere Funktion zu wickeln, auch sie die inherits = T Parameter zu geben:

clean <- function(table) {rm(table, inherits=T)} 
> lapply(tablenames,clean) 
[[1]] 
NULL 

[[2]] 
NULL 

[[3]] 
NULL 

Die Tische sind immer noch da. Was kann ich tun? Vielen Dank.

+0

Unklar. Was willst du? Sie möchten einige Mitglieder von Tabellenname entfernen? Welche? – user31264

+0

Nein, ich möchte die ganzen Tabellen aus dem Speicher entfernen, genau wie RM (Tabelle) oder Entfernen (Tabelle). – mariego

+0

Warum sollten Sie nicht rm (Tabellennamen) tun? – user31264

Antwort

3

Sie brauchen nichts zu tun, die kompliziert. Wenn tablenames ist ein Zeichenvektor der Namen der Objekte dann

entfernt werden
rm(list = tablenames, inherits = TRUE) 

wird tun, was ich denke, was Sie tun wollen.

+0

Perfekt, danke. Mir war einfach nicht bewusst, dass eine Liste eine zulässige Eingabe für die Funktion ist. – mariego

+0

@mariego Eine Liste ist keine erlaubte Eingabe, ein Zeichenvektor ist eine erlaubte Eingabe. – bouncyball

+0

Ok, list = Tabellennamen haben mich verwirrt. :) – mariego

1

Statt lapply verwenden, sollten wir unlist verwenden:

rm(list = unlist(tablenames)) 
Verwandte Themen