【问题标题】:Rendering a shiny datatable with a caption/title and pre-selected rows使用标题/标题和预选行渲染闪亮的数据表
【发布时间】:2020-08-21 23:10:29
【问题描述】:

我正在尝试编写 shiny app 来绘制 xy 数据。每个xy 点都与几个因素相关联:

set.seed(1)
data.df <- data.frame(x = rnorm(1000), y = rnorm(1000),
                      sex = sample(c("F", "M"), 1000, replace = T),
                      age = sample(c("Y", "O"), 1000, replace = T),
                      group = sample(c("A", "B", "C", "D"), 1000, replace = T),
                      stringsAsFactors = F)

design.df <- data.frame(factor.name = c(c(rep("sex",2), rep("age",2), rep("group",4))),
                        factor.levels = c("F", "M","Y", "O","A", "B", "C", "D"), stringsAsFactors = F)

我想让用户根据从design.df 中使用DT::renderDTserver 中的renderUI 中选择多行来对xy 数据(data.df)进行子集化,其中默认选择是design.df 的所有行。使用此代码可以正常工作:

suppressPackageStartupMessages(library(dplyr))
suppressPackageStartupMessages(library(shiny))
suppressPackageStartupMessages(library(DT))

server <- function(input, output)
{
  output$design.idx <- renderUI({
    output$design.df <- DT::renderDT(design.df, server = TRUE, selection = list(mode = "multiple", selected = rownames(design.df)[1:nrow(design.df)]))
    DT::dataTableOutput("design.df")
  })

  xy.plot <- reactive({
    if(!is.null(input$design.df_rows_selected)){
      selected.design.df <- design.df[input$design.df_rows_selected,,drop = FALSE]
      selected.idx <- lapply(unique(selected.design.df$factor.name), function(f) which(data.df[,f] %in% dplyr::filter(selected.design.df, factor.name == f)$factor.levels)) %>%
        unlist() %>% unique()
      plot.df <- data.df[selected.idx,,drop=F]
      xy.plot <- suppressWarnings(plotly::plot_ly(marker = list(size = 3), type = 'scatter', mode = "markers", x = plot.df$x, y = plot.df$y, showlegend = FALSE) %>%
                                            plotly::layout(xaxis = list(zeroline = FALSE, showticklabels = FALSE, showgrid = FALSE), yaxis = list(zeroline = FALSE, showticklabels = FALSE, showgrid = FALSE)))
    } else{
      xy.plot <- NULL
    }
    return(xy.plot)
  })

  output$outPlot <- plotly::renderPlotly({
    xy.plot()
  })
}


ui <- fluidPage(
  titlePanel("Results Explorer"),
  sidebarLayout(
    sidebarPanel(
      uiOutput("design.idx")
    ),
    mainPanel(
      plotly::plotlyOutput("outPlot")
    )
  )
)

shinyApp(ui = ui, server = server)

但我也想为渲染的datatable 加上标题或说明,所以我尝试替换:

output$design.df <- DT::renderDT(design.df, server = TRUE, selection = list(mode = "multiple", selected = rownames(design.df)[1:nrow(design.df)]))

与:

output$design.df <- DT::renderDT(datatable(design.df, caption = "Subset Selection"), server = TRUE, selection = list(mode = "multiple", selected = rownames(design.df)[1:nrow(design.df)]))

在这种情况下,selected = rownames(design.df)[1:nrow(design.df)] 参数似乎被忽略并且默认选择是无行。 将selected = rownames(design.df)[1:nrow(design.df)] 更改为selected = 1:nrow(design.df) 没有任何区别。

知道如何为呈现的表格同时获取标题或标题,并将所有行作为预选默认值吗?

【问题讨论】:

    标签: r datatable shiny dt


    【解决方案1】:

    您必须将选择放在datatable 对象中:

    output$design.df <- DT::renderDT(
        datatable(design.df, 
            caption = "Subset Selection",  
            selection = list(mode = "multiple",  
                             selected = rownames(design.df)[1:nrow(design.df)])
            ), 
        server = TRUE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 2017-11-29
      • 2021-06-17
      • 2018-01-14
      • 2017-05-05
      • 2020-03-03
      • 2021-03-12
      相关资源
      最近更新 更多