Я пытаюсь создать приложение Shiny, которое имеет заданный пользователем ввод для p-значения (вероятность должна быть от 0 до 1). Ранее я велел пользователю указать значение p с помощью функции sliderInput()
.
Однако я считаю, что разрешение ограничено sliderInput()
. Мне трудно позволить пользователю определять значения, такие как 0,001 против 0,0000000001, и при этом использовать более крупные значения, такие как 0,4. В результате я не пытаюсь позволить пользователям вводить свои значения p более гибким способом, используя Shiny textInput()
. Затем они могут легко вводить значения, такие как 0,0000000001 или 1e-20 или 0,2, не пытаясь безошибочно перемещать ползунок только для того, чтобы обнаружить, что такие разрешения не существуют.
Я думаю У меня есть работающий MWE. Я использую формат validate(need)
, чтобы направлять пользователей, если они вводят что-то бессмысленное. Это может быть просто более мелкая деталь, но в настоящее время, если пользователь вводит значение типа «привет», он получает все три validate(need)
сообщения из приложения:
'P-value must be a decimal between 0 and 1.'
'P-value must be less than or equal to 1.'
'P-value must be greater than or equal to 0.'
My вопрос: Можно ли настроить этот код так, чтобы печатался только первый validate(need)
, который не прошел? Если есть другие предсказуемые проблемы, связанные с использованием textInput()
вместо sliderInput (), несмотря на работу с числами, не стесняйтесь поделиться. Спасибо за ваш совет!
Мой MWE:
if (interactive()) {
options(device.ask.default = FALSE)
ui <- fluidPage(
textInput("PValue", "P-value:", value = "0.05"),
plotOutput('plot')
)
server <- function(input, output) {
output$plot <- renderPlot({
cat(str(input$PValue))
validate(
need(!is.na(as.numeric(input$PValue)), 'P-value must be a decimal between 0 and 1.'),
need(as.numeric(input$PValue) <= 1, 'P-value must be less than or equal to 1.'),
need(as.numeric(input$PValue) >= 0, 'P-value must be greater than or equal to 0.')
)
plot(input$PValue)
})
p
}
shinyApp(ui, server)
}