使用带有summarize_each或mutate_each的匿名函数

tch*_*rty 7 r dplyr

我想在调用中使用匿名函数summarize_each:

# 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)))
Run Code Online (Sandbox Code Playgroud)

我将如何实现这一目标?显然,在使用它之前命名该函数是有效的.

ali*_*ire 7

这是一个使用大量括号的问题,所以一切都得到评估:

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
Run Code Online (Sandbox Code Playgroud)

你需要的地方

  • 函数定义周围的括号,以便定义,
  • 一组括号,.用于指示funs哪个参数粘贴传递给它的数据(看似多余的单参数函数,但多参数函数不是这样;参见?funs更多示例),以及
  • 围绕整个事物的括号来实际评估它,

这有点荒谬,但这似乎是最简洁funs可以处理的.如果你看看你要编写什么来评估一个类似的匿名函数,例如,它是有道理的

(function(bar){sum(bar/10)})(df_foo$x)
Run Code Online (Sandbox Code Playgroud)

虽然包裹整个东西的那对是额外的funs.{}如果您愿意,可以使用大括号代替外部对,这可能会产生更多的语法意义.

  • 这是编写`df_foo%>%summarize_each(funs(sum(./ 10)))的一种非常复杂的方式. (2认同)