测试 R Shiny 中一组编号输入对象中的任何输入是否为空

Test whether any input in a set of numbered input objects in R Shiny is empty

假设我为多图导出创建了 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?

输入的数量取决于用户希望每个文件导出多少图,因此所有内容都是使用 lapply(1:input$nrofplots, function(i) { .... } renderUI 结构构建的,我的 if 语句需要具有与 1:n 相同的灵活性

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

这里是我在 UI 端用来验证用户输入的片段。

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)

希望对您有所帮助。