【问题标题】:Shiny, create vector or list from several optional textInput fields闪亮,从几个可选的 textInput 字段创建向量或列表
【发布时间】:2021-01-20 02:46:56
【问题描述】:

我想构建一个命令并让用户定义最多 5 个可选参数(params1 到 params5),这些参数被添加到用“-p”分隔的命令字符串中。

-p var1=1 -p var2="one" -p option1="null" -p option2="no comment"

用户界面:

                            textInput("params1", label = "#1"),
                            textInput("params2", label = "#2"),
                            textInput("params3", label = "#3"),
                            textInput("params4", label = "#4"),
                            textInput("params5", label = "#5"),

例如,在我当前的界面中,用户可以将它们全部留空或填充一个或多个。

有没有一种优雅的方式(比我冗长且失败的代码更好)使用一些应用魔法来处理它们,并且只考虑用户放置了一些内容的 textInput 字段?

我尝试使用 get(paste0("input$params", i)) 来命名 5 个输入并获取 5 个值,但闪亮的抱怨

服务器:

params <- reactive({
    parlist <- list()
    parstring <- ""
    for (i in 1:5){
        parval <- try(get(paste0("input$params",i)))
        if (exists(parval)){
            parlist <- c(parlist, parval)
        }
    }
    if (exists(parlist)){
        parstring=paste0(" -p ", stri_join_list(parlist, collapse= " -p "))
    } else {
        parstring=""
    }
    return(parstring)
})

导致

Error in get(paste0("input$params", i)) : 
  object 'input$params1' not found
Error in get(paste0("input$params", i)) : 
  object 'input$params2' not found
Error in get(paste0("input$params", i)) : 
  object 'input$params3' not found
Error in get(paste0("input$params", i)) : 
  object 'input$params4' not found
Error in get(paste0("input$params", i)) : 
  object 'input$params5' not found
Warning: Error in exists: invalid first argument

我现在的问题是测试现有的 textInputs 值 (input$params1 ... input$params5) 并将其添加到一个向量或列表中,然后我可以在代码中使用它。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    应该这样做:

    params <- reactive({
      parlist <- Filter(
        nchar, vapply(1:5, function(i) input[[paste0("params", i)]], character(1))
      )
      if(length(parlist)){
        paste0("-p ", parlist, collapse = " ")
      }else{
        ""
      }
    })
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 2016-09-22
    • 2020-08-30
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多