Using anonymous functions with summarize_each or mutate_each

前端 未结 1 729
不知归路
不知归路 2020-12-19 06:28

I want to use anonymous functions in calls to summarize_each:

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


        
1条回答
  •  醉梦人生
    2020-12-19 07:32

    It's a matter of using a lot of parentheses so everything gets evaluated:

    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
    

    where you need

    • parentheses around the function definition so it gets defined,
    • a set of parentheses with a . to tell funs which parameter to stick the data passed to it in (seemingly redundant with single-parameter functions, but not so with multi-parameter ones; see ?funs for more examples), and
    • parentheses around the whole thing to actually evaluate it,

    which is kind of ridiculous, but that seems to be the most concise funs can handle. It makes some sense if you look at what you'd have to write to evaluate a similar anonymous function on its own line, e.g.

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

    though the pair wrapping the whole thing are extra for funs. You can use braces {} instead for the outer pair if you prefer, which might make more syntactic sense.

    0 讨论(0)
提交回复
热议问题