2017-08-02 21 views
1

私は以前の入力に依存して入力選択をしようとしています。R - Shiny条件入力

require(shiny) 
require(dplyr) 

dat <- data.frame(id1 = c(rep("A",5),rep("B",5)), 
     id2 = c(rep("C",3),rep("D",3),rep("E",4)), 
     id3 = c(rep("F",2),rep("G",3),rep("H",5)), stringsAsFactors=FALSE) 


ui <- shinyUI(fluidPage(
    sidebarPanel(
    selectInput('id1', 'ID1', choices = unique(dat$id1)), 
    selectInput("id2", "ID2", choices = unique(dat$id2)), 
    selectInput("id3", "ID3", choices = unique(dat$id3)) 
    ) 
) 
) 


server <- function(input, output,session) { 

observeEvent(
      { 
      input$id1 
      },{ 
      input$id2 
      temp <- dat %>% filter(id1%in%input$id1) 
      updateSelectInput(session,"id2",choices = unique(temp$id2)) 
      } 
     ) 
} 

shinyApp(ui = ui, server = server) 

これは私が、observeEventにアプリのchrashesを別の入力を追加するただし場合、入力1と2のために動作します。 예:

server <- function(input, output,session) { 

observeEvent(
       { 
       input$id1 
       },{ 
       input$id2 
       temp <- dat %>% filter(id1%in%input$id1) 
       updateSelectInput(session,"id2",choices = unique(temp$id2)) 
       },{ 
       input$id3 
       temp <- dat %>% filter(id1%in%input$id1 & id2%in%input$id2) 
       updateSelectInput(session,"id3",choices = unique(temp$id3)) 
       } 
    ) 
} 

さらに入力をobserveEventに渡すことはできますか?

+0

コンソールに表示されるエラーを共有できますか? –

+0

@TedoG。 '.getReactiveEnvironment()のエラー$ currentContext(): アクティブなリアクティブなコンテキストなしでは、操作は許可されません。 (あなたは反応式やオブザーバーの内部からしかできないことをしようとしました) '入力が反応式の中にあるので、どちらが奇妙です。 – count

+0

'dat'データ変数を反応式に移動しようとしましたか? –

答えて

1

更新:問題の解決策を見つけました。私はreactive関数で入力をラップし、出力を分割して対応するobserveEvent関数に渡しました。

server <- function(input, output,session) { 


change <- reactive({ 
    unlist(strsplit(paste(c(input$id1,input$id2,input$id3),collapse="|"),"|",fixed=TRUE)) 

    }) 

observeEvent(input$id1,{ 
        temp <- dat %>% filter(id1 %in% change()[1]) 
        updateSelectInput(session,"id2",choices = unique(temp$id2)) 
        } 
       ) 

observeEvent(input$id2,{ 
        temp <- dat %>% filter(id1 %in% change()[1] & id2 %in% change()[2]) 
        updateSelectInput(session,"id3",choices = unique(temp$id3)) 
        } 
       )   
    } 
+0

お知りになりたい、このソリューションは機能しますか? –

+1

@TedoG。うん、私のためにうまくいく。 – count

関連する問題