我在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]
答案 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))