r блестящий numericInput позволяет вводить значения выше максимального
Просто проверяю, есть ли еще решение этой проблемы: я не хочу, чтобы пользователь вводил значения в "Вход № 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 ответа
Одно быстрое и грязное решение было бы через сообщение об ошибке, предупреждение или просто заглушку number2
,
# Reacting to changes in input 2:
observeEvent(input$inNumber2, {
number2 <- input$inNumber2 # value 2
max_number2 <- 200
if(number2 > max_number2) {
## Conditions
number2 <- max_number2
}
output$out2 <- renderText({number2})
})
Или для условий остановки:
## Condition
stop(paste0("number2 must be lower than ", max_number2))
Или для условий предупреждения
## Condition
number2 <- max_number2
warning(paste0("number2 is set to ", max_number2))
Я решил нечто подобное, переместив numericInput()
на сервер, и изменение numericInput()
в пользовательском интерфейсе uiOutput()
, Я не знаком с observeEvents()
пока, но я надеюсь, что этот псевдокод поможет.
Предыдущий интерфейс:
HTML(paste("Numeric Input Descriptor/instructions"))
numericInput(inputId = "Num_2", label = "BLA", min = __, max = __) #1
1: Эти цифры являются вашими исходными данными для вашего числового ввода
Изменения в пользовательском интерфейсе
HTML(paste("Numeric Input Descriptor/instructions"))
uiOutput(outputId = "num_2")
Добавить к функции сервера:
output$num_2 <- renderUI({
numericInput(inputId = "Num_2", label = "BLA", min = __, max = __) #2
})
2: минимальное значение - это ваше исходное число / значение, в то время как максимальное основано на ObserveEvent()
,
Когда я установил
max = ()
в моем случае мне не нужно было говоритьmax = reactive(length(data()))
, но простоlength(data())
, Возможно, вам просто нужноObserveEvents()
Кроме того, inputId из
renderUI()
работал со всеми другими моими частями на сервере, поэтому никаких дополнительных изменений не требовалось.
Я могу рассмотреть это более подробно, если приведенного выше кода psuedo недостаточно.
Проверьте ввод на наличие экстремальных значений, если они превышают , появится всплывающее предупреждение и измените входное значение (например, на максимальное значение):
observe({
if (input$value1 > 100 || input$value1 < 0) {
showModal(
modalDialog(
title = strong("Warning!", style = "font-size:24px;
color: red;"),
p("Input value exceeds the limits.",
style = "font-size:16px"),
footer = modalButton("Close")
))
updateNumericInput(session, "value1", value = 100)
}
})