2016-06-09 2 views
1

Ich mache eine R-Funktion, in der ich assign(variable_name,some_data_frame) verwenden, um den Wert variable_name zu verbinden, der einen Wert some_string (innerhalb der Funktion gefunden) hat , zu some_data_frame. Dies gibt mir die Möglichkeit, den Namen mit >variable_name und den Datenrahmen durch >get(variable_name) anzurufen.Verwendung von save() für einen Variablennamen und Wert verbunden durch assign() in R

Was ich versuche eigentlich zu tun ist, so dass die Variable:

some_string <- some_data_frame 

... und speichern Sie es dann. ich dachte ich, das durch calling save() wie dies tun könnte:

save(get(variable_name),file = paste(c(variable_name,'.Rda'),collapse="")) 

Es stellte sich heraus, save() nicht get() ito innerhalb der Funktion sein zulässt. Irgendwelche Tipps/bessere Möglichkeiten, dies zu tun? Vielen Dank im Voraus

+0

benötigen Sie wirklich den Schritt mit 'assign()', wenn Sie es dann retten? Kannst du einfach 'save (some_data_frame), file = paste0 (some_string," .Rda ")' schreiben? – zielinskipp

+0

ja, da ich es mit dem richtigen Variablennamen (nicht nur den Dateinamen) speichern möchte – Nli

+0

@ PiotrZieliński – Nli

Antwort

1

fand ich eine Lösung (in einem Thread habe ich leider bisher übersehen)
https://stat.ethz.ch/pipermail/r-help/2011-September/289404.html Also: "" do.call (Speichern, Liste (variable_name, file = Paste (variable_name "RDA", sep =)))

@ PiotrZieliński @LarsArneJordanger

+0

nice! genau was ich brauchte. Es ist eine dieser R Macken, die schwer ist, um den Kopf zu wickeln. – zach

0

Das folgende Verfahren sollte Ihr Problem lösen.

variable_name <- "some_string" 
some_data_frame <- data.frame() 


assign(x = variable_name, 
     value = some_data_frame) 


save_quote <- bquote(
    save(.(as.name(variable_name)), 
     file = paste0(c(.(variable_name)), 
         ".Rda"))) 

save_quote 
save(some_string, file = paste0(c("some_string"), ".Rda")) 

eval(save_quote) 

Die Idee ist, dass die bquote + .() Aufbau des Anrufs erzeugt Sie brauchen, und dann müssen Sie nur diesen Anruf bewerten.

+0

Ich sehe nicht, wie das hilft, aber vielleicht bist du auf etwas. Dies ruft nur den Zeichenfolgenwert von Variablenname - und nicht das Datenframe auf. Ich habe auch versucht, as.name() mit get() zu ersetzen, was irgendwie funktioniert hat, aber gab mir einen Fehler (habe nicht gesagt, was) – Nli

+0

Der Fehler war nur "Fehler" und einige Liste, die meine Daten darstellt.frame – Nli

Verwandte Themen