函数中的filter参数默认使dplyr :: filter()不进行任何过滤

时间:2018-08-24 09:50:33

标签: r function dplyr

我正在构建一个导入excel电子表格的函数。

我希望函数包含一个参数,该参数包含用户感兴趣的变量名称。该参数的值在函数内部的dplyr :: filter()中使用。我希望参数的默认值包含所有内容(即不过滤掉任何内容)。

库和数据:

library(tidyverse)
data("iris")

没有任何默认过滤器值的过滤器功能(此方法有效):

FILTER <- function(data = iris,
                   Filter_Values) {
  data %>%
    filter(Species %in% Filter_Values)
}
FILTER(Filter_Values = c("setosa", "virginica"))

如上所述,我希望Filter_Values参数默认为不过滤任何内容。
这行得通,但当然不是一般的:

FILTER <-
  function(data = iris,
           Filter_Values = c("setosa", "versicolor", "virginica")) {
    data %>%
      filter(Species %in% Filter_Values)
  }

FILTER()

您能帮我找到一个通用的术语吗?我尝试过(但失败了):

 Filter_Values = TRUE  
 Filter_Values = c(TRUE)   
 Filter_Values = regex(".*")
 Filter_Values = everything()

任何帮助表示赞赏,
谢谢

2 个答案:

答案 0 :(得分:1)

怎么样?

FILTER <-
  function(data = iris,
           Filter_Values = unique(data$Species)) {
    data %>%
      filter(Species %in% Filter_Values)
  }

FILTER()

答案 1 :(得分:1)

也许:

FILTER <- function(data = iris,Filter_Values = NULL) {
    if (missing(Filter_Values)) data
    else data %>% filter(Species %in% Filter_Values)
}

FILTER()