grepl для любой разрешенной строки - PullRequest
2 голосов
/ 30 мая 2019

Я создаю команду grepl, переданную параметром функции. Я хотел бы пропустить команду grep, если она не нужна. Я мог бы сделать это с помощью управляющих операторов, но я хотел бы передать значение, которое возвращает все строки.

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))

1 Ответ

2 голосов
/ 30 мая 2019

Можно просто использовать . (поскольку это метасимвол для любого символа) в качестве соответствия по умолчанию для 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 'data

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
...