2017-02-10 81 views
1

在Shiny中,觀察語句運行在應用程序加載上,我想在某些情況下阻止此操作。例如,我可能有兩個標題,我想以某個值開始,在應用程序加載後,我希望它們同步。防止在Shiny中執行觀察應用程序加載

在下面的代碼中,如果您運行它,則標題將在無限循環中更新,因爲應用程序會立即更新一個標題,然後更新其他標題等等。如果您取消註釋下面的「first_time」代碼塊之一,則兩個標題將顯示爲以相同的值開始。如果你取消兩個塊的註釋,那麼它會做我想做的 - 從一個預先指定的值開始,然後在進行更改時同步。

但是這段代碼很複雜,我不想在所有觀察者中添加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)