2016-04-28 11 views
6

をmutate_each:summarize_eachで無名関数を使用するか、私は<code>summarize_each</code>への呼び出しに匿名関数を使用したい

# how to use an anonymous function in dplyr 
df_foo = data_frame(x = rnorm(100), 
        y = rnorm(100)) 

df_foo %>% 
    summarize_each(funs(function(bar) sum(bar/10))) 

は、どのように私はこれを達成するために行きますか?明らかに、使用する前に関数の名前を付けることは機能します。

+2

私はそれが必要ではないと思うのですが、なぜあなたは 'summarize_each(funs(sum /。10))')をしませんか? '.'は既にdata/columnとして定義されているので、特別な' function(bar) '部分は必要ありません。 –

答えて

5

すべてが評価されますので、それは括弧の多くを使用しての問題だ:それは定義されますので、あなたが関数定義の周り

  • 括弧が必要

    df_foo %>% 
        summarize_each(funs(((function(bar){sum(bar/10)})(.)))) 
    # 
    # Source: local data frame [1 x 2] 
    # 
    #   x   y 
    #  (dbl)  (dbl) 
    # 1 1.113599 -0.4766853 
    

  • のセットを.と括弧を付けて、funsに渡すデータをスティックするよう指示します(単一パラメータ関数では見かけ上冗長ですが、複数パラメータの場合はそうではありません;を参照)。全部の周りの多くの例については、)、および
  • 括弧は、実際には、この種のばかげている

それを評価するために、それは最も簡潔なfunsを扱うことができるようです。あなた自身の行で同様の無名関数を評価するために書かなければならないものを見れば、ある意味があります。ペアが全体を包むものの

(function(bar){sum(bar/10)})(df_foo$x) 

funsのために余分にあります。外側のペアの代わりに中括弧{}を使用することができます。これにより、より構文的な意味がある場合があります。

+2

これは' df_foo%>%summarize_each(funs(sum /。 ))) ' –

+1

@docendodiscimus真。私は実際の関数がより複雑であると仮定しましたが、上記の構文に頼る前に '.'を使うだけで良い方法です。 – alistaire

+0

@docendodiscimusそうですね、私が実際にやりたいことは10で割ることです。 – tchakravarty

関連する問題