【发布时间】:2025-12-06 14:25:01
【问题描述】:
我正在使用已弃用的 dplyr::filter_() 更新旧脚本以使用 dplyr::filter()。但是我不能再让它为空的过滤器字符串工作了:
例子:
library(dplyr)
my_df <- tibble::tibble(x = sample(c(0:9), 100, replace = TRUE))
不推荐使用的filter_() 适用于字符串和空字符串
fil1 <- "x == 5"
filter_(mydf, .dots = fil1) # works
fil2 <- NULL
filter_(mydf, .dots = fil2) # works, returns all values
NSE 版本仅适用于带引号的过滤器值,但不适用于空值
fil1 = quo(x == 5)
filter(my_df, !!enquo(fil1)) # works
fil2 = NULL
filter(my_df, !!enquo(fil2))
Error: Argument 2 filter condition does not evaluate to a logical vector
fil2 = quo(NULL)
filter(my_df, !!enquo(fil2))
Error: Argument 2 filter condition does not evaluate to a logical vector
我看到了三种可能的方法:
- 以不同方式引用
NULL - 用另一个表达式代替
NULL - 在
filter()中使用另一个参数
【问题讨论】:
-
你说它在脚本中,有什么理由不能将它包装在条件中并测试“nullness”吗?
-
@Chuck P - 当然可以,但这似乎是一个丑陋的解决方法,我必须在几个地方这样做,最糟糕的是,我对如何做到这一点仍然没有好奇心将 NULL 输入 filter()。
-
没有看到你的整个剧本会很丑,没有评论。不过,我为您提供了第二个子弹的解决方法。