如何根据另一个输入的值最大化RShiny数字输入的值?

时间:2019-10-06 23:41:30

标签: r user-interface shiny user-input

我在RShiny仪表板上有两个数字输入。基本上,我想执行的是强制index=sat sourcetype="sat_logs" Message="application message published for" | rex field=Message "UserId: (?<UserId>[^,]+), UID: (?<UID>[^,]+).*{"Application":"(?<Application>[^"]+)","ID":"(?<ID>[^"]+)" | table Application UserId UID ID 的值永远不会超过a的值。因此,在指定b中的numericInput时,我本质上会喜欢这样的a参数:max

是否甚至可以在用户界面侧进行操作?也许以某种方式与ShinyJs合作?如果没有,有人可以向我推荐服务器功能中的解决方法吗?

我知道在服务器功能中我可以以max = min(100, input$b)的形式访问输入的最小值和最大值,但是我看不到如何限制用户将数字输入推得过高。

input$a[1]

1 个答案:

答案 0 :(得分:1)

您可以uiOutput / renderUI执行此操作。您在用户界面中包含一个uiOutput,并在服务器端填充了renderUI。因此,您有机会在渲染input$b之前评估input$a。您可以在服务器中包含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))