在R Shiny中显示给定colnames的多个复选框

时间:2015-06-30 18:22:37

标签: r shiny

我正在尝试从表中获取colnames,然后每个都产生我需要的许多复选框。但是,我继续收到以下错误:

  

match.arg(位置)出错:' arg'必须为NULL或字符向量

这是我的代码:

lemon<-read.csv("LemonData.csv")
 csvuploaded<-TRUE
 shinyApp(
   ui = fluidPage(
     sidebarLayout(
       sidebarPanel(
         uiOutput(outputId="factorcheckboxes")
         )    
   )), 
   server = function(input, output) {    
     output$factorcheckboxes <- renderUI({
       if(is.null(csvuploaded))
         return(NULL)
       if(!(is.null(csvuploaded)))
         collen<-length(colnames(lemon))
         factornames<-vector()
         for(i in 1:collen){
           factornames<-c(factornames,colnames(lemon)[i])
         }
         checkboxGroupInput(inputId="variable",label="Variable:",choices=as.list(factornames),selected=NULL,inline=FALSE)
     })    
   })

当我尝试运行给定here的示例时,我收到类似的错误。我无法在错误中查明代码中的源代码,并且在调试Shiny时我不确定如何使用断点。

更新: 要求的LemonData.csv样本:

------------------------------------------
Response | Factor 1 | Factor 2 | Factor 3
------------------------------------------
5        | 2        | 5        | 2        
------------------------------------------
7        | 1        | 4        | 3
------------------------------------------

2 个答案:

答案 0 :(得分:3)

您的服务器功能可以更加简单,只需将colnames(lemon)传递给choices参数,就不需要for循环。此外,您正在检查TRUE / FALSE is.null这是不正确的,因为TRUE和FALSE都不是NULL。

lemon <- read.table(text="Response, Factor 1, Factor 2, Factor 3
5, 2, 5, 2        
7, 1, 4, 3", header=T, sep=",")
csvuploaded<-FALSE

shinyApp(
    ui = fluidPage(
        sidebarLayout(
            sidebarPanel(
              radioButtons("csvuploaded", "uploaded", c(T, F)),  # change csvuploaded
              uiOutput(outputId="factorcheckboxes")
            ),
            mainPanel()
        )), 
    server = function(input, output) {    
        output$factorcheckboxes <- renderUI({
            if(input$csvuploaded) {
                checkboxGroupInput(inputId="variable",
                                   label="Variable:",
                                   choices=colnames(lemon), selected=NULL, inline=FALSE)
            } else { NULL }
        })
    }
)

答案 1 :(得分:0)

我无法重现错误,但我能够使用下面的代码生成复选框。唯一的问题是缺少mainPanel参数,因为您使用的是sidebarLayout

lemon<-read.csv("LemonData.csv")
csvuploaded<-TRUE
library(shiny)
shinyApp(
  ui = fluidPage(
    sidebarLayout(
      sidebarPanel(
        uiOutput(outputId="factorcheckboxes")
      ),
      mainPanel(
        )
    )), 
  server = function(input, output) {    
    output$factorcheckboxes <- renderUI({
      if(is.null(csvuploaded))
        return(NULL)
      if(!(is.null(csvuploaded)))
        collen<-length(colnames(lemon))
      factornames<-vector()
      for(i in 1:collen){
        factornames<-c(factornames,colnames(lemon)[i])
      }
      checkboxGroupInput(inputId="variable",label="Variable:",choices=as.list(factornames),selected=NULL,inline=FALSE)
    })    
  })

我生成了一个&#34; LemonData.csv&#34;根据提供的表格,看起来像:

Response, Factor 1, Factor 2, Factor 3
5, 2, 5, 2        
7, 1, 4, 3