Shiny 中的一系列需求(验证):仅打印第一个失败案例
Series of need(validate) in Shiny: Printing only the first case of failure
我正在尝试创建一个闪亮的应用程序,它具有用户指定的 p 值输入(应该是 0 到 1 之间的概率)。之前,我让用户使用 sliderInput()
函数指定 p 值。
但是,我发现 sliderInput()
的分辨率受到限制。我很难让用户定义像 0.001 和 0.0000000001 这样的值,并且仍然使用像 0.4 这样的更大的值。因此,我不会尝试让用户使用 Shiny textInput()
以更灵活的方式输入他们的 p 值。然后,他们可以轻松地输入诸如 0.0000000001 或 1e-20 或 0.2 之类的值,而不会沮丧地尝试完美地移动滑块却发现这样的分辨率不存在。
我 认为 我有一个工作的 MWE。我正在使用 validate(need)
格式来指导用户输入无意义的内容。它可能只是一个更详细的细节,但目前,如果用户输入类似 "hello" 的值,他们会从应用程序收到所有三个 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.'
我的问题是: 是否可以调整此代码以便只打印失败的第一个 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)
}
您可以将三个条件分开:
validate(need(is.numeric(input$PValue), 'P-value must be a decimal between 0 and 1.'))
validate(need(as.numeric(input$PValue) <= 1, 'P-value must be less than or equal to 1.')),
validate(need(as.numeric(input$PValue) >= 0, 'P-value must be greater than or equal to 0.'))
shiny 然后一个接一个地检查各个条件并只显示一条错误消息。
我正在尝试创建一个闪亮的应用程序,它具有用户指定的 p 值输入(应该是 0 到 1 之间的概率)。之前,我让用户使用 sliderInput()
函数指定 p 值。
但是,我发现 sliderInput()
的分辨率受到限制。我很难让用户定义像 0.001 和 0.0000000001 这样的值,并且仍然使用像 0.4 这样的更大的值。因此,我不会尝试让用户使用 Shiny textInput()
以更灵活的方式输入他们的 p 值。然后,他们可以轻松地输入诸如 0.0000000001 或 1e-20 或 0.2 之类的值,而不会沮丧地尝试完美地移动滑块却发现这样的分辨率不存在。
我 认为 我有一个工作的 MWE。我正在使用 validate(need)
格式来指导用户输入无意义的内容。它可能只是一个更详细的细节,但目前,如果用户输入类似 "hello" 的值,他们会从应用程序收到所有三个 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.'
我的问题是: 是否可以调整此代码以便只打印失败的第一个 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)
}
您可以将三个条件分开:
validate(need(is.numeric(input$PValue), 'P-value must be a decimal between 0 and 1.'))
validate(need(as.numeric(input$PValue) <= 1, 'P-value must be less than or equal to 1.')),
validate(need(as.numeric(input$PValue) >= 0, 'P-value must be greater than or equal to 0.'))
shiny 然后一个接一个地检查各个条件并只显示一条错误消息。