【问题标题】:How can I maximize the value of an RShiny numeric input depending on the value of another input?如何根据另一个输入的值最大化 RShiny 数字输入的值?
【发布时间】:2020-02-04 07:23:15
【问题描述】:

我的 RShiny 仪表板上有两个数字输入。基本上我想做的是强制a 的值永远不会超过b 的值。因此,当指定anumericInput 时,我基本上会喜欢这样的max 参数:max = min(100, input$b)

甚至可以在 UI 方面做到这一点吗?也许以某种方式与 ShinyJs?如果没有,有人可以推荐我在服务器功能中的解决方法,如果有的话?

我知道在服务器函数中,我可以以input$a[1] 的形式访问输入的最小值和最大值,但我不明白如何限制用户将数字输入推得太远。

library(shiny)

ui <- fluidPage(  
  # value of a should always be smaller than b
  numericInput("a", "a:", 5, min = 1, max = 100, step = 1),
  numericInput("b", "b:", 20, min = 1, max = 100, step = 1)
)

shinyApp(ui, server)

【问题讨论】:

  • 感谢您的关注,我已更正。

标签: r user-interface shiny user-input


【解决方案1】:

您可以这样做uiOutput / renderUI。您在 UI 中包含 uiOutput 并在服务器端使用 renderUI 填充它。所以你有机会在渲染input$a 之前评估input$b。您可以在服务器中包含req,以确保input$b 具有值,然后再尝试为input$b 呈现UI。这样可以避免与input$b 没有值相关的可能错误。

编辑 要在为a 重新创建数字输入之前“记住”a 的值,我们可以使用reactiveVal。滑块显示效果更好:

library(shiny)

ui <- fluidPage(  
  # value of a should always be smaller than b
  # numericInput("a", "a:", 5, min = 1, max = 100, step = 1),
  uiOutput("aa"),
  sliderInput("b", "b:", 20, min = 1, max = 100, step = 1)
)

server <- function(input, output) {

  what_was_a <- reactiveVal()

  output$aa <- renderUI({
    x <- req(input$b)
    sliderInput("a", "a:", what_was_a(), min = 1, max = x, step = 1)
  })

  observe({
    what_was_a(input$a)
  })
}

runApp(list(ui=ui, server=server))

【讨论】:

  • 非常有用,非常感谢@teofil!只有一个后续问题:是否可以防止 numericInput 总是跳回到其 value 参数中定义的默认值?目前,当我分别修改变量a和b时,我修改b的那一刻,a跳回到value = mean(c(1,x))。
  • 看看我的编辑,这是你的想法吗?
  • 当然。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2021-06-19
相关资源
最近更新 更多