在闪亮的输入中设置默认值(以防用户在 UI 中删除它)

Set a default value in shiny inputs (in case the user deletes it in the UI)

我正在尝试在我闪亮的应用程序中为 numericInput() 设置默认(或回退)值以防止 NAs

我知道 NA 可以稍后在 server.r 中处理,但想知道是否有更优雅的替换方法每当用户在 ui.

中删除它时输入中的值

最好的方法是将 validate 包与 need() 一起使用(请参阅此 ),但这里有一些更简单且更接近您要求的方法:

library(shiny)

ui <- fluidPage(
  numericInput("obs", "Observations:", 10, min = 1, max = 100),
  verbatimTextOutput("value")
)

server <- function(input, session, output) {
  
  dafault_val <- 0
  
  observe({
    if (!is.numeric(input$obs)) {
      updateNumericInput(session, "obs", value = dafault_val)
    }
  })
  
  output$value <- renderText({ input$obs })
}

shinyApp(ui, server)

我建议使用库(shinyvalidate), which is RStudios "official" way 来解决这个问题:

library(shiny)
library(shinyvalidate)

ui <- fluidPage(
  numericInput(
    inputId = "myNumber",
    label = "My number",
    value = 0,
    min = 0,
    max = 10
  ),
  textOutput("myText")
)

server <- function(input, output, session) {
  iv <- InputValidator$new()
  iv$add_rule("myNumber", sv_required(message = "Number must be provided"))
  iv$add_rule("myNumber", sv_gte(0))
  iv$add_rule("myNumber", sv_lte(10))
  iv$enable()
  
  output$myText <- renderText({
    req(iv$is_valid())
    input$myNumber
  })
  
}

shinyApp(ui, server)