R使用选择框或selectInput中的文本输入过滤结果

时间:2014-07-22 20:45:22

标签: r filter rstudio shiny

我正在闪亮的画廊里学习/演奏/修改温斯顿的伟大电影探险家。

这是他的server.ui代码。 https://github.com/wch/movies/blob/master/server.R

在他的例子中,他使用简单的数字滑块范围过滤数字电影数据。

接下来是文本过滤,这是我遇到错误的地方。

他使用了文字输入,(textInput http://shiny.rstudio.com/gallery/widgets-gallery.html

尝试使用选择框(selectInput http://shiny.rstudio.com/gallery/widgets-gallery.html)从列表中过滤(可能是多个)文本值时遇到错误。

# Optional: filter by director
if (!is.null(input$director) && input$director != "") {
director <- paste0("%", input$director, "%")
m <- m %>% filter(Director %like% director)
}

试图以相同的方式实施他的导演过滤器代码,而不是提供&#34;导演&#34;通过选择框(而不是textInput),RStudio响应...

Error in filter_impl(.data, dots(...), environment()) : 
could not find function "%like%"

经过多次挖掘后,我相信虽然没有提及,但我也可能需要安装库(data.table)。

安装并加载data.table后,错误现在变为

Warning in min(x) : no non-missing arguments to min; returning Inf
Warning in max(x) : no non-missing arguments to max; returning -Inf
Warning in min(x) : no non-missing arguments to min; returning Inf
Warning in max(x) : no non-missing arguments to max; returning -Inf
Error in fdata[1, 1] : incorrect number of dimensions

我相信警告(不是错误)是指ggvis,

fdata错误发生在他的server.r代码

的第61行

m&lt; - as.data.frame(m)

这就是我发现自己完全不知道如何继续的地方。

解决方案要么包括一个可以说是优越的过滤方法,要么帮我把车轮放回这个例子的车上。

感谢您的时间。

哦,天哪! 我对这些快速反应感到震惊,他们在明确输入完整问题之前做出了回应。 我正在导入CSV而不是使用SQL绑定。 所有4个图书馆都已加载。

1 个答案:

答案 0 :(得分:2)

正如我所想,这似乎特定于使用RSQLite。这是一个例子

library(dplyr)
library(RSQLite)

#sample data    
dd<-data.frame(name=letters[1:5], age=21:25)

dd %>% filter(age==25)
#   name age
# 1    e  25

dd %>% filter(name %like% a)
# Error in filter_impl(.data, dots(...), environment()) : 
#   could not find function "%like%"

但现在让我们创建一个测试sqlite数据库。

#sample sqlite database
sqlite    <- dbDriver("SQLite")
exampledb <- dbConnect(sqlite,"hello.db")
dbWriteTable(exampledb, "people", dd)
sqliteCloseConnection(exampledb)
sqliteCloseDriver(sqlite)

现在我们将使用dplyr再次过滤

db <- src_sqlite("hello.db", create=F)
nm <- tbl(db, "people")

nm %>% filter(age==25)
#   row_names name age
# 1         5    e  25

nm %>% filter(name %like% a)
#   row_names name age
# 1         1    a  21

它有效。 %like%不是正确的R中缀运算符。它只是一个在使用SQL连接到适当的SQL命令时被转义和转换的命令。