在 R Shiny 中重置滑块

Reset sliders in RShiny

我是 shiny 的新手,正在制作一个用户可以调整 3 个滑块的应用程序。输出是3个slider的总变化%形式,和初始形式的差值。

我添加了一个 'reset' 按钮,以便我可以将滑块全部改回 0,但它不起作用。

我尝试寻找 , and ,但无济于事。我试了一段代码:

  observeEvent(input$reset,{
    input$Var1=0 
    return(input$Var1)
  })

调整单个滑块并将其设置为0,然后return这个值,也无济于事。 有什么建议吗?

我的完整代码是:

library(shiny)

ui=fluidPage(
  titlePanel("Sum of Sliders"),
  fluidRow(
    column(2,
           sliderInput("Var1", "Slider1:",
                       min = -100, max = 100,
                       value = 0),
           sliderInput("Var2", "Slider2:",
                       min = -100, max = 100,
                       value = 0),
           sliderInput("Var3", "Slider3:",
                       min = -100, max = 100,
                       value = 0),
           submitButton("Submit"),
           actionButton("reset", "Reset")
    ),
    column(6,
           verbatimTextOutput("text"),
           verbatimTextOutput("text2"),
           verbatimTextOutput("change")
    )
  )
)

server=function(input, output) {
  observeEvent(input$reset,{
    input$Var1=0 
    return(input$Var1)
  })

  output$text <- renderText({
    paste("Starting Value:", 0)
  })

  output$text2= renderText({
    v=rep(0,3)
    v[1]= input$Var1/100
    v[2]= input$Var2/100
    v[3]= input$Var3/100
    paste("Slider Sum:", sum(v))
  })

  output$change <- renderText({
    paste("Difference is:", output$text2-output$text)
  })
}

shinyApp(ui, server)

要更改现有输入,您可以使用 updateSliderInput。此外,由于您包含了 submitButton,我假设您希望更改仅在您单击该按钮时应用。使用 reactiveVal 可能最容易获得所需的行为。下面给出了一个工作示例,创建 output$change 留作 reader 的练习 ;) 希望这有帮助!

library(shiny)

ui=fluidPage(
  titlePanel("Sum of Sliders"),
  fluidRow(
    column(2,
           sliderInput("Var1", "Slider1:",
                       min = -100, max = 100,
                       value = 0),
           sliderInput("Var2", "Slider2:",
                       min = -100, max = 100,
                       value = 0),
           sliderInput("Var3", "Slider3:",
                       min = -100, max = 100,
                       value = 0),
           actionButton('submit','Submit'),
           actionButton("reset", "Reset")
    ),
    column(6,
           verbatimTextOutput("text"),
           verbatimTextOutput("text2")
    )
  )
)

server=function(input, output, session) {
  observeEvent(input$reset,{
    updateSliderInput(session,'Var1',value = 0)
    updateSliderInput(session,'Var2',value = 0)
    updateSliderInput(session,'Var3',value = 0)
  })

  rv_text1 <- reactiveVal()
  rv_text2 <- reactiveVal()

  observeEvent(input$submit,{
    rv_text1(paste("Starting Value:", 0))
    v=rep(0,3)
    v[1]= input$Var1/100
    v[2]= input$Var2/100
    v[3]= input$Var3/100
    rv_text2(paste("Slider Sum:", sum(v)))

  })

  output$text <- renderText({rv_text1()})
  output$text2 <- renderText({rv_text2()})

}

shinyApp(ui, server)