【问题标题】:Shiny: Dynamic number of datatablesShiny:数据表的动态数量
【发布时间】:2018-11-16 23:07:19
【问题描述】:

我正在使用附加的代码来生成基于组的子表。由于某种原因,每个表只呈现数据的最后一部分。 如果有人能告诉我出了什么问题,那就太好了。

BR

library(shiny)
library(shinydashboard)
library(DT)
library(data.table)

tabnames <- LETTERS[1:6]

DT <- data.table(mtcars[1:30,], keep.rownames=TRUE)
DT[, grp:=rep(tabnames, each=trunc(nrow(mtcars)/length(tabnames)))]


ui = dashboardPage(
  dashboardHeader(title = "Dynamic DTs"),
  dashboardSidebar(),
  dashboardBody(
    uiOutput("tables"),
    p(),
    verbatimTextOutput("selectedCells")
  )
  )


server <- function(input, output, session) {
  output$tables <- renderUI({
    output_list <- list()
    for(i in seq(tabnames)){
      output_list[[i]] <- column(4, DT::dataTableOutput(outputId=tabnames[i]))
    }
    print(fluidRow(output_list))
    return(fluidRow(output_list))
  })


  for(i in seq(tabnames)){
    tabname <- tabnames[i]
    local({
      print(DT[grp %in% tabname, 1:3])
      output[[tabname]] <- DT::renderDataTable({
        DT[grp %in% tabname, 1:3]
      }, selection=list(mode="multiple", target="cell"))
    })
  }
  output$selectedCells <- renderPrint(input$A_cells_selected)
}

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny shinydashboard dt


    【解决方案1】:

    好的,找到了解决方案:需要在单独的变量中传递它:

    library(shiny)
    library(shinydashboard)
    library(DT)
    library(data.table)
    
    tabnames <- LETTERS[1:6]
    
    DT <- data.table(mtcars[1:30,], keep.rownames=TRUE)
    DT[, grp:=rep(tabnames, each=trunc(nrow(mtcars)/length(tabnames)))]
    
    
    ui = dashboardPage(
      dashboardHeader(title = "Dynamic DTs"),
      dashboardSidebar(),
      dashboardBody(
        uiOutput("tables"),
        p(),
        verbatimTextOutput("selectedCells")
      )
      )
    
    
    server <- function(input, output, session) {
      output$tables <- renderUI({
        output_list <- list()
        for(i in seq(tabnames)){
          output_list[[i]] <- column(4, DT::dataTableOutput(outputId=tabnames[i]))
        }
        print(fluidRow(output_list))
        return(fluidRow(output_list))
      })
    
    
      for(i in seq(tabnames)){
        tabname <- tabnames[i]
        local({
          subDT <- DT[grp %in% tabname, 1:3]
          output[[tabname]] <- DT::renderDataTable({
            subDT
          }, selection=list(mode="multiple", target="cell"))
        })
      }
      output$selectedCells <- renderPrint(input$A_cells_selected)
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 2020-04-30
      • 2018-11-14
      • 1970-01-01
      • 2019-08-19
      相关资源
      最近更新 更多