Как я могу явно задать ширину столбца для таблиц R DT с помощью R Markdown?

У меня есть таблица с несколькими переменными с длинными именами переменных и длинными символьными строками в качестве значений для нескольких наблюдений. Как я могу явно задать каждую ширину столбца, поэтому таблица, отображаемая в HTML через R Markdown, не будет автоматически удваивать строки, чтобы соответствовать длинной строке в ячейке?

Было бы хорошо, если бы у меня были некоторые столбцы, которые достаточно длинные, даже если таблица не может отображать все столбцы одновременно. Но я всегда могу использовать расширение "FixedColumns" и полосу прокрутки для перемещения вправо для большего количества столбцов.

Коды, которые я использую в настоящее время для установки ширины столбца, следующие:

options = list(
    autowidth = TRUE,
    columnDefs = list(list(width = '600px', targets = c(1, 2))),

Но независимо от того, как я устанавливаю ширину по-разному, итоговая отображаемая таблица выглядит совсем не так.

Вот некоторые повторно воспроизводимые коды, которые я использовал в rmarkdown, включая генерировать макет данных и объект DT в HTML.

```{r}
# generate data
vec_1 <- c("DHDH, DDDDDTV", 
       "DHDH, DDDDDTV, TT&T",
       "DHDH, DDDDDTV, TT&T, Caaater",
       "DHDH, DDDDDTV, TT&T, Caaater, Cxx",
       "DHDH, DDDDDTV, TT&T, Cxx",
       "DHDH, DDDDDTV, Caaater",           
       "DHDH, DDDDDTV, Caaater, Cxx",
       "DHDH, DDDDDTV, Cxx")

vec_2 <- c("Some radomn long string aaa bbb ccc dddd aaa bbb ccccccc", 
       "Some radomn long stringa",
       "Some string aaa bbb",
       "Some radomn long string aaa bbb ccc dddd aaa bb (A)",
       "Some radomn long string aaa bbb ccc dddd aaa b (B)",
       "Some radomn long string aaa bbb ccc dd (D)",
       "Some radomn long string aaa bbb ccc ddd (D)",
       "Some radomn long string aaa bbb ccc d (D)",
       "Some radomn long string aaa bbb ccc ddd aaa bbb dddaa (G)",
       "Some radomn long string aaa bbb ccc ddd aaa bbb dddaa(G)", 
       "Some radomn long string aaa bbb ccc ddd aaa bbb ddd (G)",
       "Some radomn long strin(H)",
       "Some radomn long string  (G)",
       "Some radomn long (Beee)")

col_1 <- sort(rep(vec_1, 14))
col_2 <- rep(vec_2, 8)
col_3 <- c(rep(105, 14), rep(29, 14), rep(22, 14), rep(2, 14),
       rep(10, 14), rep(29, 14), rep(5, 14), rep(8, 14))
col_4 <- rnorm(112)
col_5 <- rnorm(112)
col_6 <- rnorm(112)
col_7 <- rnorm(112)
col_8 <- rnorm(112)
col_9 <- rnorm(112)

df <- data.frame(col_1, col_2, col_3, col_4, col_5, col_6, col_7, col_8, col_9)
```

```{r}
library(DT)

datatable(
    df,
    colnames = c("Source Type", "Factors",
                 "Market Counts", "Minimum", "1st Qu",
                 "Median", "Mean", "3rd Qu", "Maximum"),
    extensions = 'FixedColumns',
    options = list(
        autowidth = TRUE,
        columnDefs = list(list(width = '600px', targets = c(1, 2))),
        pageLength = 14,
        lengthMenu = c(7, 14, 28, 36),
        scrollX = TRUE,
        fixedColumns = TRUE
        )) %>%
    formatRound(4:9, digits = 2)
```

Вот скриншот DT, созданный в HTML, с использованием вышеприведенных кодов: введите описание изображения здесь

Я действительно хочу установить ширину столбца для первых двух столбцов достаточно долго, поэтому значения в каждой строке не будут помехами, как это. Я также хотел бы, чтобы ширина для столбца 4: 9 была установлена ​​одинаково. Но похоже, что в настоящее время ширина этих столбцов зависит от длины имен переменных, которая не выглядит такой замечательной. Какие-нибудь обходные пути, которые я могу сделать для улучшения? Спасибо,

Ответ 1

Вы можете получить столбец одной строки, добавив следующий css в свой html файл:

<style>
table.display td { white-space: nowrap; }
</style>

Альтернативно сделайте отдельный файл .ccs и включите его в заголовок yaml. См. Комментарий clifton здесь для дальнейшего обсуждения проблемы.

Мне не удалось быстро установить ширину остальных столбцов. Я попробовал что-то вроде:

```{r}
library(DT)

datatable(
    df,
    colnames = c("Source Type", "Factors",
                 "Market Counts", "Minimum", "1st Qu",
                 "Median", "Mean", "3rd Qu", "Maximum"),
    extensions = 'FixedColumns',
    options = list(
        autowidth = FALSE,
        columnDefs = list(list(width = '600px', targets = c(1, 2)),
                          list(width = '100px', targets = 3:(ncol(df) - 2))),
        pageLength = 14,
        lengthMenu = c(7, 14, 28, 36),
        scrollX = TRUE,
        fixedColumns = TRUE
        )) %>%
    formatRound(4:9, digits = 2)
```

Я думаю, что это связано с точками, сделанными здесь относительно установки ширины при использовании расширения fixedColumns.