2017-08-15 42 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