1

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

我知道NA可以稍后在server.r中处理,但想知道是否有更优雅的方法来替换输入中的值,只要用户在 ui 中删除它。

4

2 回答 2

0

最好的方法是使用这个validateneed()(见这个SO thread),但这里有一些更简单和更接近你要求的东西:

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)
于 2022-01-14T13:04:40.140 回答
0

我建议使用库(shinyvalidate),这是RStudios解决此问题的“官方”方式:

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)
于 2022-01-14T13:39:36.933 回答