2017-08-15 15 views
1

按下「測試垃圾箱」按鈕應該引起後observeEvent功能打印出30和隨後的25和35滑塊更新後,但30之前和之後被重複打印updateSliderInput的。由於某些原因,observeEvent代碼似乎不處理滑塊輸入中的更改。更新輸入功能不生效,直到observeEvent

ui.R:

library(shiny) 
shinyUI(fluidPage(
    titlePanel("Old Faithful Geyser Data"), 
    sidebarLayout(
    sidebarPanel(
     sliderInput("bins", 
        "Number of bins:", 
        min = 1, 
        max = 50, 
        value = 30), 
     actionButton("test","Test Bins") 
    ), 
    mainPanel(
     plotOutput("distPlot") 
    ) 
) 
)) 

server.R:

library(shiny) 
shinyServer(function(input, output, session) { 
    output$distPlot <- renderPlot({ 
    x <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins + 1) 
    hist(x, breaks = bins, col = 'darkgray', border = 'white') 
    }) 
    observeEvent(input$test,{ 
    print(input$bins) 
    updateSliderInput(session,"bins",value=25) 
    print(input$bins) 
    updateSliderInput(session,"bins",value=35) 
    print(input$bins) 
    }) 
}) 
+0

'input $ bins'在當前'observeEvent()'中沒有反應。在'$輸入一個bins'單獨'observeEvent'會前和擊中按鈕後,打印值。說得通?? – Sagar

回答

0

直到observeEvent函數結束的變化將不會生效。如果您需要使用觀察者內部滑塊的新值,則可以使用額外的變量。

在下面的示例中,您的代碼被修改爲顯示如何更新滑塊(和關聯的變量),直到observeEvent函數結束。

library(shiny) 

ui <- shinyUI(fluidPage(
    titlePanel("Old Faithful Geyser Data"), 
    sidebarLayout(
    sidebarPanel(
     sliderInput("bins", 
        "Number of bins:", 
        min = 1, 
        max = 50, 
        value = 30), 
     actionButton("test","Test Bins") 
    ), 
    mainPanel(
     plotOutput("distPlot") 
    ) 
) 
)) 

server <- function(input, output, session){  
output$distPlot <- renderPlot({ 
    x <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins + 1) 
    hist(x, breaks = bins, col = 'darkgray', border = 'white') 
    }) 
    observeEvent(input$test,{ 
    print(input$bins) 
    value <- 25 
    updateSliderInput(session,"bins",value=value) 
    cat("Slider updated to:", value, "\n") 
    # simulate some complex process 
    Sys.sleep(1) 
    cat("Observer ends\n") 
    }) 
    observeEvent(input$bins, { 
    cat("Slider changed to:", print(input$bins), "\n") 
    }) 
} 

shinyApp(ui, server) 
+0

這適用於單個更新,但如果我在observeEvent多個更新電話和需要每一個後打印? – jpd527

+0

只有最後一次更新纔有效。更新功能只標註使用新值滑塊,但直到結束觀察員將閃亮修改的滑塊。你可以使用多個觀察者。如果您對顯示更改滑塊感興趣,可以使用一些JavaScript。 – Geovany