gpt4 book ai didi

r - 根据外部值有条件地应用管道步骤

转载 作者:行者123 更新时间:2023-12-02 01:16:50 25 4
gpt4 key购买 nike

鉴于 dplyr 工作流程:

require(dplyr)                                      
mtcars %>%
tibble::rownames_to_column(var = "model") %>%
filter(grepl(x = model, pattern = "Merc")) %>%
group_by(am) %>%
summarise(meanMPG = mean(mpg))

我有兴趣有条件申请 filter取决于 applyFilter 的值.

解决方案

对于applyFilter <- 1使用 "Merc" 过滤行字符串,没有过滤器所有行都会被返回。

applyFilter <- 1


mtcars %>%
tibble::rownames_to_column(var = "model") %>%
filter(model %in%
if (applyFilter) {
rownames(mtcars)[grepl(x = rownames(mtcars), pattern = "Merc")]
} else
{
rownames(mtcars)
}) %>%
group_by(am) %>%
summarise(meanMPG = mean(mpg))

问题

建议的解决方案效率低下,因为 ifelse调用总是被评估;更理想的方法只会评估 filter步骤为applyFilter <- 1 .

尝试

效率低下的工作解决方案如下所示:

mtcars %>% 
tibble::rownames_to_column(var = "model") %>%
# Only apply filter step if condition is met
if (applyFilter) {
filter(grepl(x = model, pattern = "Merc"))
}
%>%
# Continue
group_by(am) %>%
summarise(meanMPG = mean(mpg))

当然,上面的语法是不正确的。这只是一个说明,理想的工作流程应该是什么样子。

<小时/>

所需答案

  • 我对创建临时对象不感兴趣;工作流程应类似于:

    startingObject
    %>%
    ...
    conditional filter
    ...
    final object
  • 理想情况下,我希望找到一个可以控制 filter 是否可用的解决方案。调用是否正在评估

最佳答案

这种方法怎么样:

mtcars %>% 
tibble::rownames_to_column(var = "model") %>%
filter(if(applyfilter== 1) grepl(x = model, pattern = "Merc") else TRUE) %>%
group_by(am) %>%
summarise(meanMPG = mean(mpg))

这意味着只有当 applyfilter 为 1 时才会评估 grepl,否则 filter 只是回收 TRUE

<小时/>

或者另一种选择是使用 {}:

mtcars %>% 
tibble::rownames_to_column(var = "model") %>%
{if(applyfilter == 1) filter(., grepl(x = model, pattern = "Merc")) else .} %>%
group_by(am) %>%
summarise(meanMPG = mean(mpg))
<小时/>

显然还有另一种可能的方法,您可以简单地破坏管道,有条件地执行过滤器,然后继续管道(我知道OP没有要求这样做,只是想为其他读者提供另一个例子)

mtcars %<>% 
tibble::rownames_to_column(var = "model")

if(applyfilter == 1) mtcars %<>% filter(grepl(x = model, pattern = "Merc"))

mtcars %>%
group_by(am) %>%
summarise(meanMPG = mean(mpg))

关于r - 根据外部值有条件地应用管道步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44001722/

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