2016-03-03 16 views
2

我在DB中有兩個用戶組。我想要查詢數據庫,以在Shiny應用程序中顯示checkboxGroup,並且只有一個組,具體取決於URL查詢參數。如何在Shiny中使用查詢參數

例如,對於一個網址查詢參數是這樣的:

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中顯示該用戶列表的內容,如下所示:

ui <- fluidPage(column(3, checkboxGroupInput("users", 
           label = h3("User Names"), 
           choices = userlist))) 

是否有可能將這樣的URL查詢參數(如我的示例中的groupId)傳遞給Shiny應用程序? (我的代碼工作正常,如果我硬編碼的groupId)

回答

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。

+0

如果我理解正確,會話變量只能在服務器部分中使用,使用反應式表達式或觀察者。我想在顯示UI部分之前訪問groupId變量(我想根據groupId值顯示checkboxGroupInput值)。我試過這個:https://gist.github.com/juananpe/526d56f79e4606df4200沒有成功(在UI之前的sql查詢中,groupId總是採用默認值1) – Juanan

+0

檢查我的編輯以查找一個可用的示例。 –

+1

「..在服務器部分,我會把你的dbGetQuery放在觀察者或反應表達式中」。那就是訣竅。我錯誤地試圖在UI部分中使用dbGetQuery。謝謝! – Juanan

相關問題