15

引数が 1 つの関数の場合、「標準」の R コードをmagrittrパイプ スタイルに変換するのはかなり簡単です。

mean(rnorm(100))

になる

rnorm(100) %>% mean

複数の引数を持つ関数の場合、どのように処理を進めるのが最善なのか、私にはわかりません。2 つのケースがあります。

まず、追加の引数が定数の場合。この場合、定数値を変更する無名関数を作成できます。例えば:

mean(rnorm(100), trim = 0.5)

になる

rnorm(100) %>% (function(x) mean(x, trim = 0.5))

2 つ目は、複数のベクトル引数が必要な場合です。この場合、入力をリストに結合し、リスト要素を操作する無名関数を作成できます。

cor(rnorm(100), runif(100))

になる

list(x = rnorm(100), y = runif(100)) %>% (function(l) with(l, cor(x, y)))  

どちらの場合も、私の解決策は不格好に見えるので、これを行うためのより良い方法が欠けているように感じます。複数の引数を関数にパイプするにはどうすればよいですか?

4

3 に答える 3

11

v. 1.5 には 2 つのオプションがあります。

list(x = rnorm(100), y = runif(100)) %$% cor(x, y) 

これは本質的に同じです

list(x = rnorm(100), y = runif(100)) %>% with(cor(x, y)) # you could also do this earlier  

または

list(x = rnorm(100), y = runif(100)) %>% { cor(.$x, .$y) } 

ペアはその{場でラムダ (単項関数) を作成するので、すべてを行う必要はありません(function(x) { ... })

補足として、エイリアスinsetinset2エイリアスを使用して、リストなどのパイプラインで値を「ピックアップ」できます。

于 2014-11-24T09:57:33.350 に答える