如何使用R Shiny从数据库填写下拉列表?

时间:2014-03-17 19:01:02

标签: r shiny

我想用数据库中的查询结果填充R闪亮应用程序中的drowndown列表。

#I have a global.r file where i put this code:
getData<- function()
{
  ....this function returns a single column of names. I tested that it does work.
}

#Now in my ui.r file I try to use the function to populate a dropdown list like:
source('global.r')
shinyUI(pageWithSidebar(
selectInput("names", "Select Data",getData(),selected="Name 1" multiple = FALSE)
),

当我运行此操作时,下拉列表中会填充查询标题,但不会填充查询中返回的整个列表。

任何想法。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您希望下拉列表被反应,请使用uiOutput(&#34; names&#34;)而不是ui.R中的selectInput。然后在你的server.R中你需要一个像:

这样的函数
output$names<-renderUI({
  selectInput("names", "Select Data", choices=getData(), selected=names[1])
})

http://shiny.rstudio.com/reference/shiny/latest/renderUI.html http://shiny.rstudio.com/reference/shiny/latest/htmlOutput.html

答案 1 :(得分:1)

确保通过查询检索的列具有名称。

如果您使用dbGetQuery从数据库中获取结果,即使结果只有一列,结果也将以数据框的形式返回。

res <- dbGetQuery(conn, 'select column_name from table_name')
is.data.frame(res) # this will be true

dataframe列的名称在selectInput options下拉列表中用作标题。
如果未在sql查询中命名列,则查询标题将显示在selectInput choices下拉列表中。例如,如果您执行max(column_name)之类的操作而不是选择直接列。

所以代替这个

get_data <- function(){
  conn <- dbConnect(jdbcDriver, Connection_string)
  on.exit(RJDBC::dbDisconnect(conn))
  q <- "SELECT distinct split_part(column_name, '.', 1) from table_name;"
  return (dbGetQuery(conn, q))
}

尝试

get_data <- function(){
  conn <- dbConnect(jdbcDriver, Connection_string)
  on.exit(RJDBC::dbDisconnect(conn))
  q <- "SELECT distinct split_part(column_name, '.', 1) my_name from table_name;"
  return (dbGetQuery(conn, q))
}

,请注意下拉菜单中的差异。
感谢您提供任何反馈意见。