我想用数据库中的查询结果填充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)
),
当我运行此操作时,下拉列表中会填充查询标题,但不会填充查询中返回的整个列表。
任何想法。
谢谢!
答案 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))
}
,请注意下拉菜单中的差异。
感谢您提供任何反馈意见。