首页 > 解决方案 > 'data' 必须是二维的(例如数据框或矩阵)

问题描述

嗨,我正在尝试使用 DT 格式化输出。但是,它显示一个错误:“数据”必须是二维的(例如数据框或矩阵)。如果有人可以提供帮助,我将不胜感激!

下面是从数据结构 (a1) 创建的示例。

data: a1

ind lproof lproofo var1 var2 var3 var4  var5 var6 var7 var8 var9 var10  
A001  M        G   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
A002  D        M   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
A003  D        M   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
A004  G        M   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
A005  M        G   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
A006  M        G   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
A007  G        D   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
A008  M        G   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
A009  D        G   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
B001  D        G   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
B002  M        G   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
B003  M        G   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
B004  M        D   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
B005  M        D   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
B006  M        G   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
B007  M        G   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
B008  M        D   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5
B009  M        D   2.4  0.5  20.3  0.2  2.4  0.5  2.4  0.5  2.4  0.5

当我运行数据时,会导致以下错误: 图像.png

ui <- dashboardPage(
  dashboardHeader(disable = TRUE),
  dashboardSidebar(disable = TRUE),
  dashboardBody( 
    fluidPage(
     
          selectInput("lproofo",
                      label = h3("Evaluación Vieja:"), 
                       choices = c ("All", unique(as.character(a1$lproofo))), selected = "All")
      ),
    
          selectInput("lproof", 
                      label = h3("Evaluación Nueva:"), 
                      choices = c ("All", unique(as.character(a1$lproof))), selected = "All"),
    
      DTOutput('a1'), style = "overflow-y: scroll;overflow-x: scroll;")
  )

  server = function(input, output) {
    a2 <- reactive ({
      if (input$lproof=="D" & input$lproofo=="M"){ 
          a3 <- a1[a1$lproof == "D" & a1$lproofo == "M", ]  
      } else
           if (input$lproof=="G" & input$lproofo=="M"){ 
          a3 <- a1[a1$lroof == "G" & a1$lproofo == "M", ]  
      }  else
           if (input$lproof=="M" & input$lproofo=="G"){ 
          a3 <- a1[a1$lproof == "M" & a1$lproofo == "G", ]  
      } else
          if (input$lproof=="D" & input$lproofo=="G"){ 
          a3 <- a1[a1$lroof == "D" & a1$lproofo == "G", ] 
      }  else
         if (input$lproof=="M" & input$lproofo=="D"){ 
          a3 <- a1[a1$lroof == "M" & a1$lproofo == "D", ] 
      } else
         if (input$lproof=="G" & input$lproofo=="D"){ 
          a3 <- a1[a1$lroof == "G" & a1$lproofo == "D", ]
         }
      return(a3)
    })
    
      output$a1<- renderDataTable ({
                      DT::datatable(a2)
})
  }
shinyApp(ui, server)

标签: rshinydashboardshiny-server

解决方案


你的反应功能,就是这样 - 一个功能。因此,当您使用它时,您需要像引用函数一样引用它,soa2()和 not a2。查看您的代码,似乎错误源于以下行:

DT::datatable(a2)

应该将其更改为a2作为函数引用:

DT::datatable(a2())

推荐阅读