闪亮的输入小部件的动态数量

时间:2017-07-19 22:56:20

标签: r shiny

我想编写一个读取上传数据的应用程序,然后根据列中唯一元素的数量(列名称为Big)放置足够的numericInput。这个问题here帮助了我。

代码如下:

library(shiny)
 ui <- fluidPage(
  fileInput(inputId = "up","", accept = '.csv'),
  uiOutput("sliders")
)

server <- function(input, output, session) {

  INPUT <- reactive({
    infile <- input$up

    #validate(need(input$up, "Input a valid filepath."))      

    read.csv(infile$datapath, header = TRUE, sep = ",")
  })

 inVars <- reactive({
    unique(INPUT()$Big)
  })

  output$sliders <- renderUI({
    pvars <- length(inVars())
    lapply(seq(pvars), function(i) {
      numericInput(inputId = paste0("range", pvars[i]),label = pvars[i],value = 1)
    })
  })

}

shinyApp(ui = ui, server = server)

三个问题:

1。当我把

if (is.null(infile))
return(NULL)

而不是validate,它给出了一个如下错误:

missing value where TRUE/FALSE needed

我该怎么做才能摆脱这个错误?

2。我如何为每个numericInput添加标签?

3。我以后如何使用输入值?在reactive环境中?

由于

1 个答案:

答案 0 :(得分:0)

问题不在于a语句,而在于if (is.null(infile))函数。当Shiny应用程序刚刚启动时,将执行整个lapply函数,server的长度为inVars(),序列0将为seq(pvars) {{1 }}。然后1将失败,因为当0等于numericInput时,您正在引用pvars[i]

以下是解决问题的代码,并回答了您的问题。

i

<强>更新

要测试代码,请使用包含以下内容的.csv文件:

0

截图:

Screenshot