如何在闪亮的应用程序中调整数字输入

How to adjust numericinput in a app shiny

我有一个包含两个 numericinput 的应用程序。两者都呈现0到1之间的值。我想做的是:由于两个权重之和必须等于1,所以当我select第一个权重,例如0.2时,第二个将为 0.8。明白了吗?

下面的可执行代码

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)

您可以使用 observeEventupdateNumericInput 来完成。 代码如下所示:

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 })
  
}

注意:如果您只处理两个数字并且每次需要总和等于 1,则不需要 updateNumericInput