我在数据库中有两个用户组。我想查询数据库,在Shiny应用程序中显示一个checkboxGroup,只有一个组,具体取决于URL查询参数。
例如,使用这样的URL查询参数:
http://127.0.0.1:4014/?groupId=1
理想情况下,我想获取该groupId值并使用它来过滤用户组:
res <- dbSendQuery(con, paste('SELECT user_id, user_name
FROM info i , enrolment e
WHERE i.user_id = e.fk_user_id
AND e.fk_group_id = ', groupId))
dataf <- dbFetch(res)
userlist <- as.list(setNames(dataf$user_id, dataf$user_name))
然后在Shiny中显示该用户列表的内容,作为checkboxGroup,如下所示:
ui <- fluidPage( column(3, checkboxGroupInput("users",
label = h3("User Names"),
choices = userlist)))
是否可以将这样的URL查询参数 - 例如我的示例中的groupId - 传递给Shiny应用程序? (如果我对groupId进行硬编码,我的代码工作正常)
答案 0 :(得分:1)
http://shiny.rstudio.com/articles/client-data.html
以下是您要找的内容:
groupId <- parseQueryString(session$clientData$url_search)
请记得添加
shinyServer(function(input, output, session)
在一天结束时它看起来像这样:
ui <- bootstrapPage(
h3("groupId"),
verbatimTextOutput("queryText")
)
server <- function(input, output, session) {
output$queryText <- renderText({
query <- parseQueryString(session$clientData$url_search)
paste(query, sep = "", collapse=", ")
})
}
shinyApp(ui = ui, server = server)
查看您的要点,您需要将数据库对象/变量放在服务器部分中。
server(function(input, output, session) {
source("keys.R")
con <- dbConnect( MySQL(), user=login, password=pass, db=database, host=host)
接下来,仍然在服务器部分,我将在观察者或反应式表达式中将dbGetQuery与groupId参数结合起来,并存储输出。
这样您就可以将该输出应用于UI中的checkboxGroupInput。