我目前正在构建R Shiny应用程序,并且必须将一些字符串搜索功能集成到其中。如果我的搜索框为空,则希望返回原始数据框,如果填充了搜索框,则只需将数据框过滤到包含字符串的所有行。
理想情况下,我想知道是否有可能无需使用任何条件。我已经在下面的base R中重写了我的代码的基本示例,但是NULL
似乎是grepl
函数的无效模式参数。
search <- NULL
test <- iris %>% filter(is.null(search) | grepl(search,Species))
此代码在search <- "s"
时可以正常工作,但是我想知道是否有一种方法可以在iris
时返回search <- NULL
吗?
答案 0 :(得分:2)
当条件是正确的解决方案时,请勿避免。
如果要避免进行中间分配,可以:
test <- iris %>% filter(if (is.null(search)) TRUE else grepl(search, Species))
但是我宁愿明确使用,完全避免使用过滤器:
test <- if (is.null(search)) {
iris
} else {
iris %>% filter(grepl(search, Species))
}
答案 1 :(得分:1)
通过给search
设置默认模式""
或".*"
而不是NULL
,可以无条件地执行此操作。例如,这将返回iris
的预期子集:
search <- "virginica"
filter(iris, grepl(search, Species))
这将返回整个数据帧:
search <- ""
filter(iris, grepl(search, Species))