2016-03-25 11 views
1

私は20以上のデータテーブルを作成するのに役立つユーザー定義関数を作成しています。ただし、これらのデータテーブルは、ユーザ定義関数を使用しない場合と異なり、グローバル環境では作成されません。以下のサンプルコードを参照してください。ユーザ定義関数内で作成されたデータテーブルをグローバル環境に置くことは可能ですか?

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') 

私はDFとdf.aデータテーブルは、グローバル環境で作成されませんので、機能の作品は、コンソールウィンドウにdata.tableを出力df.aラインを提供するかどうかだけを知っています。この方法でデータテーブルを表示することはできません。グローバル環境でテーブルを作成することは可能ですか?

答えて

1

は、関数内でグローバル変数としてdf.aを割り当てる代わりに=<<-演算子を使用します。

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

を参照するか、またはあなただけの機能では、データテーブルのリストを返すことができたと標準的な割り当てを使用する。

1

私は@ナットの二番目の答えは、より良い選択であると思う:

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) 
} 

グローバル割り当ては通常悪い地球環境、内のオブジェクトを上書きすることができます。ここで関数を変更すると、次のように使用できます。

myresults <- samplefunction(input) 
# show df 
myresults[["df"]] 
# show df.a 
myresults[["df.a"]] 
関連する問題