r - Shiny 中的两个 Action 按钮

标签 r shiny

我正在编写一个包含两个 actionButton 的 Shiny 函数。这两个是左右按钮,可在单击时帮助绘图移动。第一次单击时,这两个按钮都可以正常工作。当我重新单击它们时会出现问题。无论我单击哪个按钮,它都会在两个范围之间来回弹跳。我想这可能是“右”和“左”按钮在点击后不返回0的问题。解决我的问题的替代方法是什么?先谢谢了!

我的代码如下:

shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
  sliderInput("test", label="test", min=0, max=1808, value=c(0,50)),
  actionButton("left", "Left"),
  actionButton("right", "Right")

),
mainPanel(
  plotOutput("bar")
)
)
))


shinyServer(function(input, output, session){
observe({
if(input$right){
  isolate({
    if(input$test[2]+ round((input$test[2]-input$test[1])/2) <= 1808)
    updateSliderInput(session, "test", value=c(input$test[1] + round((input$test[2]-input$test[1])/2), input$test[2] + round((input$test[2]-input$test[1])/2)))
})
}
if (input$left){
  isolate({
    if(input$test[1] - round((input$test[2]-input$test[1])/2) > 0)
    updateSliderInput(session, "test", value=c(input$test[1] - round((input$test[2]-input$test[1])/2), input$test[2] - round((input$test[2]-input$test[1])/2)))
})      
}
})

subdata <- reactive({
  sub.data <- data[input$test[1]:input$test[2]]
})

output$bar <- renderPlot({
  barplot(subdata())
})  

})

最佳答案

在 Shiny 的 0.11 中有非常好的事件处理更新,大大简化了 actionButton 的使用。现在您可以使用 observeEvent()对于此类任务,您希望在响应事件时执行功能(例如,按下 actionButton )

最小工作示例(需要 Shiny 版本 0.11):

library(shiny)
server <- function(input, output, session) {
    observeEvent(input$left, function() {
        if(input$test[2]+ round((input$test[2]-input$test[1])/2) <= 1808)
        updateSliderInput(session, "test", value=c(input$test[1] + round((input$test[2]-input$test[1])/2), input$test[2] + round((input$test[2]-input$test[1])/2)))
    }

    )
    observeEvent(input$right, function() {
         if(input$test[1] - round((input$test[2]-input$test[1])/2) > 0)
    updateSliderInput(session, "test", value=c(input$test[1] - round((input$test[2]-input$test[1])/2), input$test[2] - round((input$test[2]-input$test[1])/2)))
    }
    )
}

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
    sliderInput("test", label="test", min=0, max=1808, value=c(0,50)),
      actionButton("left", "Left"),
      actionButton("right", "Right")
    ),
    mainPanel(


    )
  )
)

shinyApp(ui = ui, server = server)

关于r - Shiny 中的两个 Action 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28948623/

相关文章:

r - 标签中带有长名称的ggplotly

r - 全天根据逻辑填写NA

data.table R 中的行明智模式

r - ShinyApp : Use a selected input to subset some levels of a categorical variable, 并使用它作为在服务器中绘图的输入

R Shiny - 在 Shiny 模块中插入动态 UI

r - 在 R 版本 3.4.4 中使用 R 包 'effects'

r - ts(x) : 'ts' object must have one or more observations 错误

r - 使用shinyFiles上传文件

r - Shiny :如何更新 reactiveValues 对象?

r - aws.s3 部署 Shinyapp 时的包问题