Как установить ширину столбца в таблице R Shiny данных? - PullRequest
0 голосов
/ 17 марта 2019

Я создаю панель Shiny для отображения таблицы данных.

Моя цель - автоматически настроить ширину столбца таблицы данных, чтобы она соответствовала значениям ячеек в 1 строку вместо нескольких строк.Тем не менее, я получил следующий результат:

enter image description here

Кажется, что Имя было скорректировано как то, что я хочу, но Примечания не сделал.Затем я перешел по этим ссылкам: https://rstudio.github.io/DT/options.html,

Настройка ширины столбца в R Shiny DataTable не работает в случае большого количества столбцов ,

R Блестящий набор ширины столбца DataTable

В основном, решения, предлагаемые онлайн, заключались в использовании аргумента autoWidth = TRUE с columnDefs при рендеринге таблицы данных.

Это не сработалониже приведен результат:

enter image description here

Кажется, что ширина таблицы была сужена по сравнению с первоначальным результатом

Ниже мой окончательный код:

header <- dashboardHeader(
  title = "Test"
)

sidebar <- dashboardSidebar(
)

body <- dashboardBody(
            box(title = "Test", width = 7, status = "warning", DT::dataTableOutput("df"))
)

# UI
ui <- dashboardPage(header, sidebar, body)

# Server
server <- function(input, output, session) {

  output$df = DT::renderDataTable(df, options = list(
    autoWidth = TRUE,
    columnDefs = list(list(width = '10px', targets = c(1,3)))))
    }

# Shiny dashboard
shiny::shinyApp(ui, server)

Я не уверен, почему ширина столбца Имя может быть скорректирована с длиной значения ячейки, но ширина Примечания не могу.Я также пытался использовать таблицу данных в других проектах, ширина столбцов может быть отрегулирована только с длиной имя столбца .

Другой вариант в моем случае - установить для ширины столбца значениебыть только определенным количеством символов и иметь полный контекст значений ячеек, появляющихся при наведении курсора на ячейку.Решение было предложено здесь: R Shiny Dashboard DataTable Ширина столбца .Тем не менее, это только для DT, но это не сработало, когда я интегрировал его в Shiny.

Заранее спасибо.

1 Ответ

1 голос
/ 18 марта 2019

Если вам не нужны несколько строк, вы можете добавить свойство CSS white-space: nowrap к ячейкам нужных вам столбцов.

Поскольку вы находитесь в Shiny, это легко сделать,определив класс CSS и назначив его столбцам с помощью className в опции columnDefs:

library(DT)
library(shiny)

dat <- data.frame(
  V1 = c("A", "B"),
  V2 = c(
    "A cool guy living in US and Canada", 
    "A cool guy living in California"
  ),
  V3 = c(
    "A cool guy living in US and Canada", 
    "A cool guy living in California"
  ),
  V4 = c(
    "A cool guy living in US and Canada", 
    "A cool guy living in California"
  ),
  V5 = c(
    "A cool guy living in US and Canada", 
    "A cool guy living in California"
  ),
  stringsAsFactors = FALSE
)

css <- "
.nowrap {
  white-space: nowrap;
}"

ui <- fluidPage(
  tags$head(
    tags$style(HTML(css))
  ),
  DTOutput("table")
)

server <- function(input, output){

  output[["table"]] <- renderDT({
    datatable(dat, 
              options = list(
                columnDefs = list(
                  list(className = "nowrap", targets = "_all")
                )
              ))
  })
}

shinyApp(ui, server)

enter image description here

...