purrr::map
). 有些是标准函数,比如
mean
,其他是用户定义的函数。
我希望输出是一个数据帧,这些函数的名称作为存储其输出的列。
下面的示例显示了过程和所需的输出:
library(purrr)
foo <- function(x) sd(x) * .1 # arbitrary user-defined function
agg_funcs <- c(mean, median, foo)
names(agg_funcs) <- c("mean", "median", "foo")
fields <- c("mpg", "disp") # fields to aggregate with agg_funcs
fields %>%
set_names(fields) %>%
map_df(function(x) map_df(agg_funcs, function(f) f(mtcars[[x]])), .id = "field")
# A tibble: 2 x 4
field mean median foo
<chr> <dbl> <dbl> <dbl>
1 mpg 20.1 19.2 0.603
2 disp 231. 196. 12.4
但我不想说出
agg_funcs
用手。相反,我想做一些
agg_funcs %>% set_names(agg_funcs) # doesn't work
我知道我可以得到如下函数名的字符串表示:
as.character(substitute(mean))
# "mean"
我甚至可以把这个操作包装成一个函数,一个接一个地传递我想要的agg函数:
f <- function(func) as.character(substitute(func))
f(mean) # "mean"
此函数
f()
是我生活中想要的东西
map
操作,以获取字符串形式的函数名。
地图
或
sapply
聚集函数
(原因我不完全明白):
sapply(agg_funcs, f) # alt: map(agg_funcs, f)
mean median foo
[1,] "[[" "[[" "[["
[2,] "X" "X" "X"
[3,] "i" "i" "i"
如何在不创建
names(agg_funcs)
用手吗?