【发布时间】:2020-05-26 14:14:56
【问题描述】:
我从purrr 文档中看到,应该可以使用map(list(fn1, fn2, fn3), exec, !!!args) 语法或类似的东西将函数列表映射到参数上。对于broom 函数tidy、glance 和augment,这将如何工作,通常必须用do 进行补充?这是我几乎总是喜欢在相同的数据和模型上同时执行的三个功能。当然我可以明确地这样做:
# works but is repetitive
MY_MODEL <- hp ~ cyl
my_glance <- mtcars %>% do(glance(lm(data = ., formula = MY_MODEL)))
my_tidy <- mtcars %>% do(tidy(lm(data = ., formula = MY_MODEL)))
my_augment <- mtcars %>% do(augment(lm(data = ., formula = MY_MODEL)))
我怀疑有一种更好、更紧凑的方法可以做到这一点,而不必每次都重新输入...lm(data = ., formula = MY_MODEL...,但我想不通。我试过了
# doesn't work
omnibroom <- function(df, model){
map(list(glance, tidy, augment),
exec,
~{(do(.x(lm(data = df, formula = model))))}
)
}
omnibroom(mtcars, MY_MODEL)
但我认为我没有正确理解 !!! 语法。
在同一个模型和数据上调用这三个 broom 函数是否有一个简洁的习惯用法?
【问题讨论】: