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 中的一系列需要(验证):仅打印第一个失败案例的主要内容,如果未能解决你的问题,请参考以下文章

仅捕获 ListBox 中的第一个单词

Shiny 应用程序 (R) 中的交互式目录输入

Shiny R仅绘制滑块范围的极值

如何在 Shiny 应用程序中验证 textInput?

jquery 验证仅验证第一个字段 - 其他字段被忽略

Java 中的 2D Arrays TicTacToe 游戏.. 验证问题