2013-03-13 8 views
9

私はプロットを作成する関数を書いています。私が遭遇する問題の1つは、再現可能なグラフを作成する必要があることです。 1つの解決策は、もちろん、生成する各プロットのコードを保存することです(つまり、関数の引数に設定した正確な値を保存する)。しかし、データオブジェクトなどを含むすべての入力値を取得してリストに保存し、出力として返す方法があるのだろうかと思います。次のようにそれを行うための簡単な方法は、私が思う、次のとおりです。R:関数の引数の値をすべて取り込む方法はありますか?

plot.foo <- function(x, main=NULL){ 
    plot(x, main=main) 
    list(data=x, main=main) 
} 

はしかし、私が書いた関数は、(下記参照)省略記号引数に加えて、引数の束を持っているので、そこにあるのだろうかすべての入力引数値を素早く保存できます。ありがとう!スタートから

plot.foo <- function(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10,...){ 
    ... 
} 

答えて

15

あり有用であり得る様々な機能です。

plot.foo <- 
    function(x, main=NULL){ 
    cl <- match.call() 
    print(cl) 
    plot(x, main=main) 
    list(data=x, main=main) 
    } 

plot.foo(1) 
## plot.foo(x = 1) 
## $data 
## [1] 1 
## 
## $main 
## NULL 

plot.foo <- 
    function(x, main=NULL, ...){ 
    extras=list(...) 
    print(extras) 

    cl <- match.call() 
    print(cl) 

    plot(x, main=main) # this would actually produce the grapjic 
    list(data=x, main=main, extras=extras) # this returns the arguments as a list 
    } 

plot.foo(1, sthg="z") 
## $sthg 
## [1] "z" 

# You could assign the returned list to a name or you could `save` to a file 
plot.foo(x = 1, sthg = "z") 
## $data 
## [1] 1 
## 
## $main 
## NULL 

その結果deparseをテキストとして返すことができsys.call機能もあります。

5

、パラメータ

do.call("plot", L) 

の集合として、そのオブジェクトを使用して、すべてのプロットの引数の名前付きリスト

L <- list(x=data, main="string", ylim=c(0,10)) 

次にプロットを作るためにLを保存することを確認してください後で使用する。

実施例:match.callmatch.arg、次いで...引数を抽出するための特定の方法がある:

L<-list(x=1:10, y=(1:10)^2, main="Y by X",type="l",xlab="X",ylab="Y") 
do.call("plot",L) 
関連する問題