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