我的单参数函数输出数据帧
library(tidyverse)
myfun <-function(x) {mtcars %>%
filter_(x) %>%
group_by(cyl) %>%
summarise(mean(disp), mean(drat)) %>%
mutate(group=x)}
当向此函数输入单个参数时,它会按预期输出一个数据帧:
myfun('mpg>15')
cyl mean(disp) mean(drat) group
4 105 4.07 mpg>15
6 183 3.59 mpg>15
8 105 3.20 mpg>15
如何将这样的函数应用于参数列表,以便输出是组合列表中所有结果的一个数据帧。例如,我想将 myfun 应用于列表
c('mpg>15', 'drat>4.2')
并且,作为结果,获得单个数据帧:
cyl mean(disp) mean(drat) group
4 105 4.07 mpg>15
6 183 3.59 mpg>15
8 105 3.20 mpg>15
4 89 4.53 drat>4.2
8 351 4.22 drat>4.2
如何做到这一点(最好在 tidyverse 内)?
最佳答案
要留在tidyverse
,也许是这样的:
c("mpg>15", "am==1") %>% map(myfun) %>% bind_rows
但是,正如 @alistaire 在评论中指出的那样,您可以使用 map_df
来缩短此时间,它返回一个数据帧:
c("mpg>15", "am==1") %>% map_df(myfun)
混合选项,三种等效方式,使用lapply
:
lapply(c("mpg>15", "am==1"), myfun) %>% bind_rows
c("mpg>15", "am==1") %>% lapply(myfun) %>% bind_rows
bind_rows(lapply(c("mpg>15", "am==1"), myfun))
或者,对于混合 base 和 tidyverse 来说更加反常:
c("mpg>15", "am==1") %>% lapply(myfun) %>% do.call(rbind, .)
对于基础 R 传统主义者:
do.call(rbind, lapply(c("mpg>15", "am==1"), myfun))
关于r - 将列表应用于输出数据帧的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40274796/