我爱上了包装中的htmlTable()
功能。Gmisc
我的桌子比以前漂亮多了。在我的表中,我有一列包含相当大的条目,我很难保持它足够宽以至于数字不会换行。我想一个nowrap
按列的论点或一个column.width
论点都可以解决这个问题,但我似乎也找不到。有没有办法做到这一点?还是我应该满足于“相当不错”?
2 回答
我知道我参加聚会有点晚了,但这里有一些你可以去的方法。为了记录,有很多方法可以调整这些表格,让它们看起来完全符合您的要求。因此,IMO 的选项是 1) 每个单元格着色选项、单元格高度和宽度、行高和宽度、列高和宽度等都有各种参数;或 2) 让用户想办法。
话虽如此,这里有一些可能的解决方案:
library(Gmisc)
## solution 1: quick, dirty
tbl <- `colnames<-`(matrix(1:9, 3, 3), c('one','two','three'))
(tmp <- htmlTable(tbl))
tbl[1,1] <- 'this is a very long cell, this is a very long cell, this is a very long cell, this is a very long cell'
(tmp <- htmlTable(tbl))
tbl[1,1] <- gsub(' ', ' ', tbl[1,1])
htmlTable(tbl)
基本上只是折叠任何空格并使用 nbsp 代替
下一个解决方案实际上使用了一些合法的 html 标签:
## solution 2:
tbl <- `colnames<-`(matrix(1:9, 3, 3), c('one','two','three'))
tbl[1,1] <- 'this is a very long cell, this is a very long cell, this is a very long cell, this is a very long cell'
(tmp <- htmlTable(tbl))
(tmp <- gsub('<td', '<td nowrap="nowrap"; ', tmp))
上述解决方案将所有单元格样式 (td) 替换为包含 nowrap 的单元格样式。替换所有单元格可能是也可能不是您想要的,这导致我选择了下一个选项:正则表达式
## solution 3: regex
tbl <- `colnames<-`(matrix(1:9, 3, 3), c('one','two','three'))
tbl[1,1] <- 'this is a very long cell, this is a very long cell, this is a very long cell, this is a very long cell'
(tmp <- htmlTable(tbl))
regmatches(tmp, gregexpr('<td.*?</td>', tmp))
# [[1]]
# [1] "<td style='text-align: left;'>this is a very long cell, this is a very long cell, this is a very long cell, this is a very long cell</td>"
# [2] "<td style='text-align: center;'>4</td>"
# [3] "<td style='text-align: center;'>7</td>"
# [4] "<td style='text-align: left;'>2</td>"
# [5] "<td style='text-align: center;'>5</td>"
# [6] "<td style='text-align: center;'>8</td>"
# [7] "<td style='border-bottom: 1px solid grey; text-align: left;'>3</td>"
# [8] "<td style='border-bottom: 1px solid grey; text-align: center;'>6</td>"
# [9] "<td style='border-bottom: 1px solid grey; text-align: center;'>9</td>"
我没有继续下去,因为我认为上述其中一项很适合,而正则表达式不是我的强项(html 或 css 都不是)。
我敢肯定还有其他类似的选择。例如,您可以尝试在列标签中插入宽度标签。
控制列宽
(以及其他行、列或单元格样式元素)
埋在 CRAN https://cran.r-project.org/web/packages/htmlTable/htmlTable.pdf中,在“addHtmlTableStyle”、“css.cell 参数”下:如果 css.cell 是向量,则假定样式应该在整个行中重复(也就是说,css.cell 中的每个元素都指定一整列“x”的样式)。
所以:
library("htmlTable")
library("tidyverse")
myDf <- data.frame(x=1:5, y=6:10)
myDf %>%
addHtmlTableStyle(css.cell = c("width: 50;","width: 100;")) %>%
htmlTable()
htmlTable CRAN 文档中的“css.cell 参数”部分还解释了如何控制每个表格单元格的样式。