在R Shiny

时间:2019-09-23 16:14:24

标签: r shinydashboard shiny-server shiny-reactivity

我正在尝试使用选择输入来创建动态查询。

类似

从装有水果的篮子(“苹果”,“香蕉”,“樱桃”)中选择*

我有一个名为fruit_list的表,该表填充了我的selectinput框。

selectInput(“ fruit_list”,标签= h5(“选择水果”),倍数= T,选择=(dbGetQuery(conn,“从fruit_list'中选择水果”;“)))

到目前为止,当我渲染选择时,我得到“苹果”,“香蕉”,“樱桃” 我需要在元素之间加逗号以获取“苹果”,“香蕉”,“樱桃” 当我从多选框“苹果”中选择一个元素

从装有水果(“苹果”)的篮子中选择*

我的应用程序运行完美。但是,当我选择多个元素“ apple”和“ banana”时,出现错误:期望单个字符串值:[type = character;范围= 2]。

很抱歉在开始时没有这么明确

2 个答案:

答案 0 :(得分:1)

假设ansc("a", "b", "c", "d")的非空子集。例如,

ans <- c("b", "d")
sprintf("select * from table where item in (%s)", toString(shQuote(ans, "csh")))

给予:

[1] "select * from table where item in ('b', 'd')"

如果您使用的是R 3.6或更高版本,则可以选择将shQuote(ans, "csh")替换为sQuote(ans, FALSE)

如果问题中的abcd应该代表数字,那么我们就不需要引号,因此可以替换{{1 }}仅toString(...)

不使用任何软件包。

答案 1 :(得分:0)

selectInput将用户输入作为字符向量,当查询更复杂时,glue应该更易于使用。

library(glue)
# user_input <- input$selectInput # e.g. c("a","b","c","d")
user_input <- c("a","b","c","d")
sql_where <- paste0(user_input,collapse = ", ")
glue("select * from table where item in ({sql_where})")

它翻译为:

select * from table where item in (a, b, c, d)