代码之家  ›  专栏  ›  技术社区  ›  frank

在RShiny中重置滑块

  •  1
  • frank  · 技术社区  · 7 年前

    我是新来的闪亮,并正在制作一个应用程序,其中一个用户调整3个滑块。输出是3个滑块以%形式的总变化,以及与初始形式的差异。

    我添加了一个“重置”按钮,以便可以将滑块全部更改回0,但它不起作用。

    我试着找 R shiny: reset plot to default state ,和 Reset inputs with reactive app in shiny ,但毫无用处。我试了一段代码:

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

    若要调整单个滑块并将其设置为0,则返回此值,但也无效。 有什么建议吗?

    我的全部代码是:

    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)
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Florian    7 年前

    若要更改现有输入,可以使用 updateSliderInput . 另外,因为你包括一个 submitButton ,我假设您只希望在单击该按钮时应用更改。它可能是最容易使用的 reactiveVal 是为了得到想要的行为。下面给出了一个工作示例,创建 output$change 作为练习留给读者;)希望这有帮助!

    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)