如何使用 R Markdown 显式设置 R DT 表的列宽?
How can I explicitly set column width for R DT tables using R Markdown?
我有一个 table 有多个变量,长变量名和长字符串作为多个观察值。我如何显式设置每个列宽,以便通过 R Markdown 呈现为 HTML 的 table 不会自动将行加倍以将长字符串放入单元格?
即使 table 无法同时显示所有列,我也可以使用一些足够长的列。但是,我总是可以使用 'FixedColumns' 扩展和滚动条向右移动更多列。
我目前用来设置列宽的代码是:
options = list(
autowidth = TRUE,
columnDefs = list(list(width = '600px', targets = c(1, 2))),
但无论我如何设置不同的宽度,最终呈现的 table 看起来完全不同。
这是我在 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 的屏幕截图:
我真正想要的是将前两列的列宽设置得足够长,这样每一行的值就不会像这样乱七八糟。我还希望将 4:9 列的宽度设置为相同。但是看起来目前这些列的宽度取决于变量名的长度,这看起来不太好。我可以在这里做任何解决方法来改进吗?谢谢,
您可以通过将以下 css 添加到您的 html 文件来获得单行列:
<style>
table.display td { white-space: nowrap; }
</style>
或者制作一个单独的 .ccs
文件并将其包含在 yaml header 中。有关此问题的进一步讨论,请参阅 clifton here 的评论。
我无法快速设置其他列的宽度。我试过类似的东西:
```{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)
```
我认为这与 here 关于使用 fixedColumns
扩展时设置宽度的要点有关。
我有一个 table 有多个变量,长变量名和长字符串作为多个观察值。我如何显式设置每个列宽,以便通过 R Markdown 呈现为 HTML 的 table 不会自动将行加倍以将长字符串放入单元格?
即使 table 无法同时显示所有列,我也可以使用一些足够长的列。但是,我总是可以使用 'FixedColumns' 扩展和滚动条向右移动更多列。
我目前用来设置列宽的代码是:
options = list(
autowidth = TRUE,
columnDefs = list(list(width = '600px', targets = c(1, 2))),
但无论我如何设置不同的宽度,最终呈现的 table 看起来完全不同。
这是我在 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 的屏幕截图:
我真正想要的是将前两列的列宽设置得足够长,这样每一行的值就不会像这样乱七八糟。我还希望将 4:9 列的宽度设置为相同。但是看起来目前这些列的宽度取决于变量名的长度,这看起来不太好。我可以在这里做任何解决方法来改进吗?谢谢,
您可以通过将以下 css 添加到您的 html 文件来获得单行列:
<style>
table.display td { white-space: nowrap; }
</style>
或者制作一个单独的 .ccs
文件并将其包含在 yaml header 中。有关此问题的进一步讨论,请参阅 clifton here 的评论。
我无法快速设置其他列的宽度。我试过类似的东西:
```{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)
```
我认为这与 here 关于使用 fixedColumns
扩展时设置宽度的要点有关。