gpt4 book ai didi

R:如何将过滤器列表传递给函数

转载 作者:行者123 更新时间:2023-12-02 08:17:55 25 4
gpt4 key购买 nike

我有一个自定义过滤器列表,我需要根据这些过滤器对我的数据框进行子集化。例如,对于 mtcars,我有这个列表:

 filters=c(mpg>15, wt<2, carb>2 & am==0)

我想将此列表传递给包含 dplyr/pipes 的函数
fmean <- function(filter_x)   mtcars %>% filter(filter_x) %>% summarise(mean(disp))

将列表传递给 fmean 后,我的预期输出是:
subset               mean(disp)
mpg>15 192
wt<2 80.2
carb>2 & am==0 324

如何获得上述输出?

编辑:感谢@alistaire 和其他在这里回复的人,找到了一个 tidyverse 解决方案:
 library(tidyverse)
filters <- c("mpg > 15", "wt < 2", "carb > 2 & am==0")

fmean <- function(filter_x) { mtcars %>%
filter_(filter_x) %>%
summarise(mean(disp)) %>%
mutate(subset=filter_x) %>%
select(subset, everything()) }
filters %>% map_df(fmean)

输出:
 subset               mean(disp)
mpg>15 192.3
wt<2 80.2
carb>2 & am==0 324.5

最佳答案

最直接的方法可能是使用 purrr包,连​​同 dplyr , 是 tidyverse 的一部分包裹:

library(tidyverse)

filters <- c("mpg > 15", "wt < 2", "carb > 2 & am==0")

fmean <- function(filter_x) {
# Create list of means
means <- filter_x %>%
map(~ mtcars %>% filter_(.dots = .x) %>% summarise(mean(disp)))

# Create tibble from means
tibble(subset = filter_x, means = unlist(means))
}

fmean(filters)

此外,您想使用 filter_而不是 filter它允许您将子集条件作为字符串而不是不带引号的文本传递。

关于R:如何将过滤器列表传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com