2017-12-28 25 views
1

input$some_selectionが開始後に変更されると、最初のオブザーバのみが無効になります。これは、開始時に、反応値input_some_selectionNULLに設定され、もう更新されないためです。開始時にリアクティブ値をNULLに処理する

ラジオボタンを押すと、出力は次のようになります。

[1] "observed at point 1" 
[1] "observed at point 2" # as expected until here 
[1] "observed at point 1" 
# why not invalidate the second observer also? 
[1] "observed at point 1" 
[1] "observed at point 1" 
[1] "observed at point 1" 

1)なぜ、この行動?それは最初のNULL値によるものですか?

2)例を実行するには何ができますか(input$some_selectionが変更された場合、つまり依存関係を生成する場合)2番目のオブザーバを無効にしますか?

library(shiny) 

ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(), 
    mainPanel(
     radioButtons(inputId = "some_selection", 
        "Distribution type:", 
        c("Normal" = "norm", 
        "Uniform" = "unif", 
        "Log-normal" = "lnorm")) 
    ) 
) 
) 

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

    eventlog<-c("") 

    input_some_selection <- reactive({ 
    input$some_selection 
    }) 

    observeEvent(input$some_selection, { 
    print("observed at point 1") 
    eventlog<<-c(eventlog,"observed at point 1") 
    }) 

    observeEvent(input_some_selection, { 
    print("observed at point 2") 
    eventlog<<-c(eventlog,"observed at point 2") 
    }) 

} 

shinyApp(ui = ui, server = server) 

答えて

1

ちょっとタイプミス。今、予想通り

observeEvent(input_some_selection(), { 
    print("observed at point 2") 
    eventlog<<-c(eventlog,"observed at point 2") 
    }) 

https://shiny.rstudio.com/reference/shiny/latest/reactive.html

出力:反応性値は、もちろん、関数呼び出しによってアクセスされなければならない

[1] "observed at point 1" 
[1] "observed at point 2" 
[1] "observed at point 1" 
[1] "observed at point 2" 
# ... 
+0

nullかどうかを確認することは常に良いです。オブザーバイベントでは、 と言うことができます。 'if(is.null(input $ some_selection))return(NULL)'ヌルが選択されている場合は、「UIで選択してください」を表示することもできます – user5249203

関連する問題