2013-04-23 98 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