如何在Shiny中使用查询参数

时间:2016-03-03 22:51:39

标签: r shiny

我在数据库中有两个用户组。我想查询数据库,在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进行硬编码,我的代码工作正常)

1 个答案:

答案 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。