2016-03-25 6 views
1

Ich erstelle eine benutzerdefinierte Funktion, die mir hilft, mehr als 20 Datentabellen zu erstellen. Diese Datentabellen werden jedoch nicht in der globalen Umgebung erstellt, anders als wenn keine benutzerdefinierten Funktionen verwendet werden. Siehe den folgenden Beispielcode.Ist es möglich, Datentabellen, die innerhalb einer benutzerdefinierten Funktion erstellt wurden, in der globalen Umgebung zu platzieren?

library(data.table) 
samplefunction <- function(f) { 
    df=as.data.table(list(V1=c('a','a','b','c'),V2=c(1,2,3,4))) 
    df.a=df[V1==f] 
    df.a 
} 
samplefunction('a') 

Ich weiß nur, ob die Funktion arbeitet die Linie df.a bereitgestellt gibt die data.table im Konsolenfenster, da df und df.a Datentabellen nicht tun in der globalen Umgebung erstellt bekommen. Ich kann meine Datentabellen nicht auf diese Weise anzeigen. Ist es möglich, die Tabellen in der globalen Umgebung zu erstellen?

Antwort

1

Verwenden Sie den <<- Operator statt =df.a als globale Variable in der Funktion zuweisen:

samplefunction <- function(f) { 
    df=as.data.table(list(V1=c('a','a','b','c'),V2=c(1,2,3,4))) 
    df.a <<- df[V1==f] 
} 

samplefunction('a') 
df.a 

https://stat.ethz.ch/R-manual/R-devel/library/base/html/assignOps.html Siehe

Oder Sie könnten nur noch die Funktion zurückgeben eine Liste der Datentabellen und Verwenden Sie die Standardzuordnung.

1

Ich denke, dass @ Nats zweite Antwort ist die bessere Wahl:

samplefunction <- function(f) { 
    df=as.data.table(list(V1=c('a','a','b','c'),V2=c(1,2,3,4))) 
    df.a=df[V1==f] 

    return(list("df"=df, "df.a"=df.a) 
} 

Globale Zuordnungsobjekte im globalen Umfeld zu überschreiben, die in der Regel schlecht. Mit der Änderung der Funktion können Sie sie dann wie folgt verwenden:

myresults <- samplefunction(input) 
# show df 
myresults[["df"]] 
# show df.a 
myresults[["df.a"]] 
Verwandte Themen