我该如何在R Markdown中明确设置R DT表格的列宽?

14

我有一个表格,其中包含多个变量,每个变量名称都很长,每行也有长的字符字符串作为值。如何显式设置每列的宽度,以便通过R Markdown渲染的HTML表格不会自动将行加倍以适应长字符串进入单元格?

如果有一些列足够长,即使表格不能同时显示所有列,对我来说也没关系。但是,我总是可以使用“FixedColumns”扩展名和滚动条向右移动以获取更多列。

我目前正在使用以下代码设置列宽:

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

但是无论我如何不同地设置宽度,最终呈现的表格看起来并没有太大的区别。

以下是一些可重现的代码,我在rmarkdown中使用这些代码,包括生成模拟数据和HTML中的DT对象。

```{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)
```

这是使用上述代码生成的HTML格式的DT截图: enter image description here 我希望将前两列的列宽设置得足够长,这样每行中的值就不会像现在这样混乱。我还希望将第4到9列的宽度设置为相同。但目前看来,这些列的宽度取决于变量名的长度,这看起来不太好。有什么解决方法可以改善吗?谢谢。

我认为这里的问题本质上与这里相同:当列数过多时,列宽将被忽略。 - CL.
1个回答

5

如果您想要在HTML文件中添加以下CSS样式,可以得到一个单行列:

<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 扩展时设置宽度有关,这里提到了相关的要点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接