【问题标题】:Test whether any input in a set of numbered input objects in R Shiny is empty测试 R Shiny 中一组编号输入对象中的任何输入是否为空
【发布时间】:2019-03-17 10:48:20
【问题描述】:

假设我为多图导出创建了 10 个selectInput 下拉菜单,这些selectInputs 被称为“xaxis_1”、“xaxis_2”、......、“xaxis_10”

对于单个 1 我可以写: if(!is.null(input$xaxis_1)) { .... do stuff } 在用户没有输入任何名称时停止它运行导出,然后按提交,以避免崩溃。

更一般的,你可以检查一下:

if(!is.null(input[[paste('xaxis', i, sep = '_')]])) { ...}

如何优雅地编写它,以便 1 行代码检查 1:10 输入 [[...]] 中的任何一个是否为空,即 NULL?

输入的 nr 取决于用户想要在每个文件中导出多少个绘图,所以一切都是用lapply(1:input$nrofplots, function(i) { .... } renderUI 结构构建的,我的 if 语句需要具有与 1:n 相同的灵活性

在如下图所示的情况下,按Initiate export 应该会给出sweetalert(已涵盖),表示至少缺少 1 个值

【问题讨论】:

  • req() 适合你吗?
  • 不,如果等式返回任何输入为空,我想发出警告 sweetalert。在我的情况下,n 是灵活的,因为输入的 nr 取决于用户设置生成多少图

标签: r shiny apply any


【解决方案1】:

这是我在 UI 端用来验证用户输入的 sn-p。

library(shiny)
library(shinyjs)

ui <- fluidPage(
 useShinyjs(),  # Set up shinyjs
 numericInput('axis1','Val 1',1),
 numericInput('axis2','Val 2',1),
 numericInput('axis3','Val 3',1),
 actionButton('Go','Plot')
)

server <- function(input, output, session) {
  #Try 1, space, AAA and check what shiny will return
  observe(print(input$axis1))
  observe({
    All_Inputs <- vapply(paste0('axis',1:3),
                                function(x){isTruthy(input[[x]])},
                                logical(1))
    All_InputsCP <- all(All_Inputs)
    shinyjs::toggleState(id="Go", condition = All_InputsCP) #This is to make the button Go able or disable according to condition All_InputsCP #
  })
}

shinyApp(ui, server)

希望对你有帮助。

【讨论】:

  • 啊,苏里曼的好把戏。了解大多数单独的元素,但以前从未使用过 isTruthy,并且 toggleState 似乎是 ::enable ::disable 的一个很好的简化,我在我的应用程序中使用了很多。在这里使用 isTruthy 而不是 !is.null 有什么重大进步吗?
  • @Mark 如您在上面看到的,当用户间的值与输入法不兼容时,Shiny 返回 NA。所以&gt; !is.null(NA) [1] TRUE.
  • 好的。可以修改您的函数以测试我的图像中的所有 4 个输入列表吗? 4个集合的通用名称是xaxis_channel_n, xaxis_parameter_n, yaxis_channel_n, yaxis_parameter_n
  • 是的,请参阅?sprintf 让您比paste0 更容易
猜你喜欢
  • 2021-09-30
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2018-11-28
相关资源
最近更新 更多