web-dev-qa-db-ja.com

selectInputの選択肢を対話的に変更する

もともと私はパラメータ「会社ID」と「日付」を受け取るこの光沢のあるインターフェイスを作成しますが、ここで問題が発生します。ほとんどの人は、ID、名前だけで作業している会社を知りません。 。

だから私は理想的にはこのような検索機能を作成したい enter image description here

私の現在のアイデアは、すべてのパートナー企業とそのidのリストを含むテーブルをglobal.Rに渡すことです。次に、textInputを検索変数として渡し、サーバー側で検索を実行します。ただし、selectInputパネルのsearchResultsをUIに戻す方法がわかりません。

私の現在のコード:

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)

partnerListはこの形式です

    name            id 
 ------------------
    McDonalds        1
    Wendy's          2
    Bestbuy          3 
30
Green Demon

Shinyバージョン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で何も変更する必要はありません。

7
Vladimir S.

RstudioのJCからの返信:

もちろん、検索文字列にtextInputを使用し、renderUI/uiOutputを使用して動的なselectInputを作成します。その後、コードの残りの部分はselectInputの値に依存します。 (selectInput値は値なしで開始されるため、selectInput値を読み取るときは、NULLなどを必ず確認してください。)

3
Green Demon