grepl 允许任何字符串

grepl for any string allowed

我正在构建一个由函数参数提供的 grepl 命令。如果不需要,我想跳过 grep 命令。我可以用控制语句做到这一点,但我想传递一个 returns 所有字符串的值。

some_sub <- function(data, descr="*.*"){
     return(data %>% filter(grepl(descr, description)))
} 

我想要进行以下工作:

some_sub(data, "Cabbage")
some_sub(data) # returns everything

其中数据

data <- structure(list(description = structure(c(1L, 1L, 2L, 1L), 
                                   .Label = c("Cabbage","Carrot"), 
                                   class = "factor"), 
           weight = c(12L, 9L, 7L, 15L)), 
      class = "data.frame", 
      row.names = c(NA,-4L))

一个选项是只使用 .(因为它是任何字符的元字符)作为 descr 参数

的默认匹配

又添加了一个参数colNm以概括更多

如果有空格 ("") 并且想要匹配那些,最好将 * 作为默认值

some_sub <- function(data, colNm, descr="."){
 colNm <- enquo(colNm)
 data %>%
      filter(grepl(descr, !!colNm))
} 

some_sub(iris, Species, "setosa")
some_sub(iris, Species)

使用 OP' 数据

some_sub(data, description, "Cabbage")
#  description weight
#1     Cabbage     12
#2     Cabbage      9
#3     Cabbage     15

some_sub(data, description)
#  description weight
#1     Cabbage     12
#2     Cabbage      9
#3      Carrot      7
#4     Cabbage     15