Shiny 中的一系列需要(验证):仅打印第一个失败案例
Posted
技术标签:
【中文标题】Shiny 中的一系列需要(验证):仅打印第一个失败案例【英文标题】:Series of need(validate) in Shiny: Printing only the first case of failure 【发布时间】:2020-05-29 20:49:27 【问题描述】:我正在尝试创建一个闪亮的应用程序,该应用程序具有用户指定的 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)
【问题讨论】:
【参考方案1】:你可以把三个条件分开:
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 然后一个接一个地检查各个条件并只显示一条错误消息。
【讨论】:
以上是关于Shiny 中的一系列需要(验证):仅打印第一个失败案例的主要内容,如果未能解决你的问题,请参考以下文章