【发布时间】:2023-03-27 09:13:02
【问题描述】:
我正在尝试编写函数,该函数将根据一些可选的用户变量执行过滤,以在绘制过滤或未过滤数据之前对输入数据进行阈值处理。在此示例中,data 是具有多个列的 data.frame,其中包括两个感兴趣的列(var1 和 var2):
example_func <- function(
data,
low_cutoff_var1 = NULL,
high_cutoff_var1 = NULL,
low_cutoff_var2 = NULL,
high_cutoff_var2 = NULL) {
...
}
现在,作为此功能的一部分,如果用户在绘制数据之前提供了输入data,我想过滤输入data(根据用户选择过滤或未过滤)。过滤步骤是:
data_filtered <- data %>%
filter(var1 > low_cutoff_var1 &
var1 < high_cutoff_var1 &
var2 > low_cutoff_var2 &
var2 < high_cutoff_var2)
但是,问题是如果一个或多个截止值是NULL,那么过滤器就不起作用。
现在我知道可以一步一步地为每个截止时间做一些事情。 即:
if (!is.null(x = low_cutoff_var1) {
data_filtered <- data %>%
filter(var1 > low_cutoff_var1)
}
if (!is.null(x = high_cutoff_var1) {
etc
但是,这似乎不优雅,并且可能有更好的方法来编写此函数。我觉得filter_if 可能是正确的选择,但我在语法以及如何在我的特定情况下使用时遇到了问题。
任何关于更简单的方法来完成我正在尝试做的事情的建议都会很棒!
谢谢! 山姆
【问题讨论】:
标签: r function dplyr filtering tidyverse