2017-02-10 6 views
1

Shinyでは、observeステートメントはアプリの負荷で実行されるため、これを防ぐ場合があります。たとえば、特定の値で開始する2つのタイトルがあり、アプリの読み込み後に同期を取りたい場合があります。Shinyのアプリケーション負荷で監視を実行しないようにする

実行すると、すぐに1つのタイトルを更新してからもう1つのタイトルを更新するので、タイトルは無限ループで更新されます。下の "first_time"コードブロックの1つをコメント解除すると、両方のタイトルが同じ値で始まるように見えます。両方のブロックをコメント解除すると、必要な処理が実行されます。事前に指定された値で開始し、変更が行われると同期が取れます。

しかし、このコードは複雑で、すべてのオブザーバーにifステートメントを追加したくありません。より単純な方法が必要です。ドキュメントを見ると、おそらくsuspended = TRUEresume()を使用していたようですが、例が見つかりません。

私はrelated questionと尋ねました。その答えは同様に控えめでした。何かご意見は?

library(shiny) 

first_time1 <<- TRUE 
first_time2 <<- TRUE 

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

    observeEvent(input$title1, { 
    # if(first_time1){ 
    # first_time1 <<- FALSE 
    # return() 
    # } 
    updateTextInput(session, "title2", value = input$title1) 

    }) 

    observeEvent(input$title2, { 
    # if(first_time2){ 
    # first_time2 <<- FALSE 
    # return() 
    # } 
    updateTextInput(session, "title1", value = input$title2) 
    }) 

} 

ui <- fluidPage(
    tabsetPanel(


    tabPanel("A", textInput("title1", "titleA", "This is the title A")), 
    tabPanel("B", textInput("title2", "titleB", "This is title B")) 
) 
) 


shinyApp(ui = ui, server = server) 
+0

このアプリの目標は何ですか? –

答えて

1

あなたが探していたものはignoreInitです。下記を参照

observeEvent(input$title1, { 
    updateTextInput(session, "title2", value = input$title1) 
    }, ignoreInit = T) 

    observeEvent(input$title2, { 
    updateTextInput(session, "title1", value = input$title2) 
    }, ignoreInit = T) 
関連する問題