【问题标题】:R Shiny DT data table column width works on ALL columns, but not on specific columnR Shiny DT 数据表列宽适用于所有列,但不适用于特定列
【发布时间】:2021-08-28 18:28:04
【问题描述】:

我查看了文档、示例和其他答案。但是,就我的一生而言,我无法让DT::datatable() 扩大我的输出中的一列。当我将选项设置为包含 _all 列时,它可以工作,但显然不是我想要的。

这是一个工作示例:

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

mtcars <- mtcars[1:5, ]

ui <- fluidPage(
  fluidRow(
    dataTableOutput(('mtcarsDT')),
    )
  )

server <- function(input, output, session) {
  output$mtcarsDT <- DT::renderDataTable({
    recFeedbackCol <- lapply(1:nrow(mtcars), function(recnum)
      as.character(
        radioButtons(
          paste0(
            'rec', recnum),
          '',
          choices = c('good' = 'Good', 'bad' = 'Bad', 'neutral' = 'Neutral'),
          inline = TRUE
        )
      )
    )
    recFeedbackCol <- tibble(feedback = recFeedbackCol)
    
    mtcars <- bind_cols(
      mtcars,
      recFeedbackCol
      )
    
    mtcars %>%
      DT::datatable(
        escape = FALSE, selection = 'none',
        extensions = 'FixedColumns',
        options = list(
          paging = FALSE, pageLength = 10, ordering = FALSE,  scrollX = TRUE,
          fixedColumns = list(leftColumns = 2),
          preDrawCallback = JS(
            'function() { Shiny.unbindAll(this.api().table().node()); }'
            ),
          drawCallback = JS(
            'function() { Shiny.bindAll(this.api().table().node()); } '
            ),
          autoWidth = TRUE,
          columnDefs = list(list(width = '200px', targets = 'feedback'))
          )
        )
    })
  }

shinyApp(ui = ui, server = server)

更改targets = '_all' 有效。但是,这会扩大所有列。

> packageVersion('shiny')
[1] ‘1.4.0’
> packageVersion('DT')
[1] ‘0.17’

我缺少什么吗?

更新:

现在,我正在使用ncol(mtcars) 和一些选项,而 DT 根本不渲染。我得到了显示的列和零行:

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

mtcars <- mtcars[1:5, ]

ui <- fluidPage(
  fluidRow(
    dataTableOutput(('mtcarsDT')),
    )
  )

server <- function(input, output, session) {
  output$mtcarsDT <- DT::renderDataTable({
    recFeedbackCol <- lapply(1:nrow(mtcars), function(recnum)
      as.character(
        radioButtons(
          paste0(
            'rec', recnum),
          '',
          choices = c('good' = 'Good', 'bad' = 'Bad', 'neutral' = 'Neutral'),
          inline = TRUE
        )
      )
    )
    recFeedbackCol <- tibble(feedback = recFeedbackCol)
    
    mtcars <- bind_cols(
      mtcars,
      recFeedbackCol
      )
    
    mtcars %>%
      DT::datatable(
        extensions = 'FixedColumns',
        rownames = FALSE,
        escape = FALSE,
        class="compact cell-border",
        options = list(
          pageLength = 15, 
          lengthChange = FALSE, 
          scrollX = TRUE,
          searching = FALSE,
          dom = 't',
          ordering = TRUE,
          fixedColumns = list(leftColumns = 2),
          preDrawCallback = JS(
            'function() { Shiny.unbindAll(this.api().table().node()); }'
          ),
          drawCallback = JS(
            'function() { Shiny.bindAll(this.api().table().node()); } '
          ),
          autoWidth = TRUE,
          columnDefs = list(
            list(width = '200px', targets = ncol(mtcars))
          )
        )
      )
    })
  }

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    对于targets,您可以使用列索引号(索引从零开始):

    targets = 3
    

    或者要针对多个特定列,使用数组:

    targets = list(3,4)
    

    还有一些其他选项 - 请参阅 here 以供参考。


    更新

    因此,使用上面提到的索引是从零开始的事实,并查看参考文档(请参阅上面的链接),我们可以说以下内容:

    • 表中第一列的索引为 0。
    • 表中第二列的索引为 1。
    • ...等等。

    我们也可以说:

    • 表中最后一列的索引为 -1。
    • 表中倒数第二列的索引为 -2。
    • ...等等。

    【讨论】:

    • 见上面的更新,还有新的代码会出现问题。
    • 好的 - 如果您更改了表格和应用程序的其他部分,我认为现在这是一个关于新/不同问题的新/不同问题。如果你回到原来的,它是否适用于我建议的语法?
    • 是的。虽然,我想要一个强大的解决方案,只需添加一组基本选项即可。目标字段似乎有一些问题。
    • 好的 - 我建议您继续提出一个新问题,明确具体问题是什么。我会留意这个新问题。祝你好运!
    • 首先,谢谢。确定。我能。虽然,如果您知道答案,不清楚为什么您不会进一步提供帮助?我的意思是,系统要求我发布的最小可重复示例。然后,一个新的问题出现了。当然,如果您不知道这个新问题的解决方案,我很乐意将其作为一个新问题发布。谢谢。
    猜你喜欢
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多