我在数据库中有两个用户组。我想查询数据库以在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进行硬编码,则我的代码可以正常工作)
最佳答案
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。
关于r - 如何在Shiny中使用查询参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35784667/