2013-04-23 100 views
29

本來我創建這個閃亮的界面,需要在參數「公司ID」和「日期」,但在這裏我們有一個問題:大多數人不按ID知道與我們合作的公司,只有自己名稱,即(麥當勞,Radioshack)。交互改變selectInput選擇

所以我想最好創建這樣 enter image description here

我現在的想法是在一個表中通過包括我們的所有合作公司的名單和他們的ID來global.R搜索功能。然後傳入textInput作爲搜索變量並在服務器端執行搜索。但是,如何將searchResults傳遞迴selectInput面板的用戶界面,我迷失了方向?

我當前的代碼:

ui.R

library(shiny) 

shinyUI(pageWithSidebar(


    sidebarPanel(

    textInput("nameSearch", "Or, Search for company name", 'McDonald'), 
    selectInput("partnerName", "Select your choice", list("searchResults"), 
    br(), 
    submitButton("Update View"), 
    br(), 

), 

server.R

shinyServer(function(input, output) { 

    #subTable 
    searchResult<- reactive({ 
    subset(partners, grepl(input$nameSearch, partners$name)) 
    }) 

    output$searchResults <- renderTable({ 
    searchResult[,1] 
    }) 

global.R

partners<- read.csv("partnersList.csv", fill=TRUE) 

partnersList就是這種格式

name   id 
------------------ 
    McDonalds  1 
    Wendy's   2 
    Bestbuy   3 

回答

29

你需要做的UI反應。我還沒有測試過(錯過了數據),但我應該工作。在server.R添加:

output$selectUI <- renderUI({ 
selectInput("partnerName", "Select your choice", searchResult()[,1]), 
}) 

而且在ui.R更換了與selectInput:從Rstudio的JC

htmlOutput("selectUI") 
+0

我已經受夠了這種成功。以下是我還沒有嘗試的另一種方法:https://groups.google.com/forum/?fromgroups=#!topic/shiny-discuss/JGJx5A3Ge-A – GSee 2013-04-23 16:58:16

+0

感謝Sacha爲我工作。 GSee:新的發展將會是驚人的! – 2013-04-23 17:09:39

+1

這在R Markdown中不起作用。有關如何在R Markdown中做到這一點的任何想法? – NewNameStat 2014-11-06 15:33:05

3

回覆:

當然,只要使用在textInput的搜索字符串,然後使用 renderUI/uiOutput創建動態selectInput。然後你的代碼的其餘部分可以依賴於selectInput的值。 (請務必檢查 爲NULL或任何讀取selectInput值的時候,因爲它 會開始時,沒有價值。)

6

閃亮的版本0.8(其中我已經測試過它),在server.R添加以下:

shinyServer(function(input, output, session) { 

    observe({ 
    # This will change the value of input$partnerName to searchResult()[,1] 
    updateTextInput(session, "partnerName", 
        label = "Select your choice", 
        value = searchResult()[,1]) 
    }) 

}) 

現在內shinyServer函數有額外的參數session

可以跳過標籤,如果你不需要去改變它。

你不需要改變任何東西ui.R