我正在闪亮的画廊里学习/演奏/修改温斯顿的伟大电影探险家。
这是他的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个图书馆都已加载。
答案 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命令时被转义和转换的命令。