我在数据库中有两个用户组。我想查询数据库以在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/

10-10 00:29
查看更多