如果模式为 NULL,如何对 return 整个字符串使用 grep?
How to use grep to return entire string if pattern is NULL?
我目前正在构建一个 R Shiny 应用程序,并且必须将一些字符串搜索功能合并到其中。如果我的搜索框为空,我希望对原始数据框进行 returned,如果搜索框已填充,则只需将数据框过滤为包含该字符串的所有行。
理想情况下,我想知道这是否可能而无需使用任何条件。我在下面的基础 R 中重写了我的代码的一个基本示例,但是 NULL
似乎是 grepl
函数的无效模式参数。
search <- NULL
test <- iris %>% filter(is.null(search) | grepl(search,Species))
此代码在 search <- "s"
时按预期工作,但我想知道是否有办法在 search <- NULL
时 return iris
?
当条件是正确的解决方案时,不要回避它们。
如果您想避免中间作业,您可以:
test <- iris %>% filter(if (is.null(search)) TRUE else grepl(search, Species))
但我更愿意通过明确的方式完全避免过滤器:
test <- if (is.null(search)) {
iris
} else {
iris %>% filter(grepl(search, Species))
}
您可以通过给 search
默认模式 ""
或 ".*"
而不是 NULL
来做到这一点。例如,这将 return iris
的预期子集:
search <- "virginica"
filter(iris, grepl(search, Species))
这将 return 整个数据帧:
search <- ""
filter(iris, grepl(search, Species))
我目前正在构建一个 R Shiny 应用程序,并且必须将一些字符串搜索功能合并到其中。如果我的搜索框为空,我希望对原始数据框进行 returned,如果搜索框已填充,则只需将数据框过滤为包含该字符串的所有行。
理想情况下,我想知道这是否可能而无需使用任何条件。我在下面的基础 R 中重写了我的代码的一个基本示例,但是 NULL
似乎是 grepl
函数的无效模式参数。
search <- NULL
test <- iris %>% filter(is.null(search) | grepl(search,Species))
此代码在 search <- "s"
时按预期工作,但我想知道是否有办法在 search <- NULL
时 return iris
?
当条件是正确的解决方案时,不要回避它们。
如果您想避免中间作业,您可以:
test <- iris %>% filter(if (is.null(search)) TRUE else grepl(search, Species))
但我更愿意通过明确的方式完全避免过滤器:
test <- if (is.null(search)) {
iris
} else {
iris %>% filter(grepl(search, Species))
}
您可以通过给 search
默认模式 ""
或 ".*"
而不是 NULL
来做到这一点。例如,这将 return iris
的预期子集:
search <- "virginica"
filter(iris, grepl(search, Species))
这将 return 整个数据帧:
search <- ""
filter(iris, grepl(search, Species))