2017-11-27 3 views
1

Dies ist sehr einfach, aber ich habe gesucht und konnte keine Lösung für dieses kleine Problem finden.Verwenden Sie Funktion Argument als Name für neue Datenrahmen in R

Ich möchte für einen neuen Datenrahmen, zum Beispiel das Argument einer Funktion als Namen verwenden:

assign.dataset<-function(dataname){ 
    x<-c(1,2,3) 
    y<-c(3,4,5) 
    dataname<<-rbind(x,y) 
} 

Dann

assign.dataset(new.dataframe.name) 

schafft nur einen neuen Datensatz mit dem Namen name.

Ich habe versucht, die einfügen und zuweisen Funktionen, aber ohne Erfolg.

Vielen Dank

+1

Dies ist kein guter Weg, um Dinge in R. zu tun Während technisch möglich, Funktionen sollten keine Variablen erstellen außerhalb der eigenen Umfang. Betrachten Sie etwas mehr wie 'Dataname <- create_dataset()' wobei 'create_dataset()' nur 'rbind (x, y)' zurückgibt. – MrFlick

Antwort

1

Sie können es so machen ...

assign.dataset<-function(dataname){ 
    x<-c(1,2,3) 
    y<-c(3,4,5) 
    assign(deparse(substitute(dataname)), rbind(x,y), envir=.GlobalEnv) 
} 

assign.dataset(new.dataframe.name) 

new.dataframe.name 
    [,1] [,2] [,3] 
x 1 2 3 
y 3 4 5 
1

Hier entspricht rlang ist Antwort auf @ Andrews:

library(rlang) 

assign.dataset<-function(dataname){ 
    x<-c(1,2,3) 
    y<-c(3,4,5) 
    assign(quo_name(enquo(dataname)), rbind(x,y), envir=.GlobalEnv) 
} 

assign.dataset(test_df) 

enquo das Argument durch die bereitgestellte einfängt Benutzer und bündelt es mit der Umgebung, die die Funktion in eine quosure aufgerufen wurde. quo_name wandelt dann das quosure in ein Zeichen um.

Allerdings würde ich gegen dies tun, anstatt die Ausgabe Ihrer Funktion zu einem Objekt zuweisen. Im Folgenden ist, wie ich es tun würde:

assign.dataset<-function(){ 
    x<-c(1,2,3) 
    y<-c(3,4,5) 
    rbind(x,y) 
} 

test_df = assign.dataset() 

Ergebnis:

[,1] [,2] [,3] 
x 1 2 3 
y 3 4 5 
Verwandte Themen