只是看看是否有解决这个问题的方法:我不希望用户在“输入数字2”中输入的值超过允许的最大值(无论在“输入数字1”中输入什么)。当用户使用微调器时,它有效,但当用户只是键入值时,它无效。
library(shiny)
ui <- fluidPage(
numericInput(inputId = "inNumber1", label = "Input number 1",
value = 100, min = 10, max = 200, step = 10),
numericInput(inputId = "inNumber2", label = "Input number 2",
value = 50, min = 10, max = 200, step = 10),
textOutput("out1"),
textOutput("out2")
)
server <- function(input, output, session) {
# Reacting to changes in input 1:
observeEvent(input$inNumber1, {
number1 <- input$inNumber1 # value 1
updateNumericInput(session, inputId = "inNumber2",
label = "Input number 2",
value = floor(number1/2),
min = 10, max = number1, step = 10)
output$out1 <- renderText({number1})
})
# Reacting to changes in input 2:
observeEvent(input$inNumber2, {
number2 <- input$inNumber2 # value 2
output$out2 <- renderText({number2})
})
}
shinyApp(ui, server)
3条答案
按热度按时间yacmzcpb1#
一个快速而肮脏的解决方案是通过一个错误消息,一个警告或简单的上限
number2
。或者,对于停止条件:
或者,对于警告条件
7d7tgy0s2#
我通过将
numericInput()
移动到服务器,并将UI中的numericInput()
更改为uiOutput()
来解决类似的问题。我还不熟悉observeEvents()
,但我希望这个伪代码能有所帮助。上一界面:
1:这些数字是您的原始输入为您的数字输入
界面变化
添加到服务器函数:
2:最小值是您的原始数字/值,而最大值基于
ObserveEvent()
。max = ()
时,我不需要说max = reactive(length(data()))
,而只需要length(data())
。renderUI()
的inputId与服务器中的所有其他部分一起工作,因此不需要额外的更改。如果上面的psuedo代码还不够,我可以仔细看看。
tag5nh1u3#
检查输入是否有极值,* 如果超过 * 则有弹出警告,更改输入值(例如,更改为最大值):