r - 将列表应用于输出数据帧的函数

标签 r list function dplyr tidyverse

我的单参数函数输出数据帧

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/

相关文章:

r - mutate(across) 在 tidyverse 中生成多个新列

用于排除 R 中带连字符的单词的正则表达式

带有训练和测试集的removeSparseTerms

c++ - 如何使这个函数递归

javascript - 如何调用同名的父函数?

r - 如何从给定的起点在 R 中进行爬山?

python - 添加要设置的列表

html - 如何在使用 flutter_html 插件的地方自定义 UL > LI

c++ - 有人可以向我解释此链接列表如何工作吗?

python - 当我的蛇的坐标与我的随机项目相同时,控制台应该打印 "You got the item!"但事实并非如此。为什么?