简体   繁体   中英

How to adjust numericinput in a app shiny

I have an app with two numericinput . Both presented values between 0 and 1. What I wanted to do is the following: As the sum of the two weights must equal 1, so when I select the first weight, for example, 0.2, the second will be 0.8. Got the idea?

Executable code below

library(shiny)

ui <- fluidPage(
  
  numericInput("weight1", label = h4("Weight 1"),
               min = 0, max = 1, value = 0.5),
  
  numericInput("weight2", label = h4("Weight 2"),
               min = 0, max = 1, value = 0.5),
  
  helpText("The sum of weights should be equal to 1"),
  
  hr(),
  
  fluidRow(column(3, verbatimTextOutput("value1"))),
  fluidRow(column(3, verbatimTextOutput("value2")))
  
)

server <- function(input, output,session) {
  
  output$value1 <- renderPrint({ input$weight1 })
  
  output$value2 <- renderPrint({ input$weight2 })
  
}

shinyApp(ui = ui, server = server)

在此处输入图像描述

You can do it by using observeEvent and updateNumericInput . Here's what the code will look like:

server <- function(input, output,session) {
  
  observeEvent(input$weight1, {
    updateNumericInput(session, 'weight2',
                       value = 1 - input$weight1)
  })
  
  output$value1 <- renderPrint({ input$weight1 })
  
  output$value2 <- renderPrint({ input$weight2 })
  
}

Note : You don't need updateNumericInput if you are dealing with only two numbers and every time you need the sum to be equal to 1.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM