4

我爱上了包装中的htmlTable()功能。Gmisc我的桌子比以前漂亮多了。在我的表中,我有一列包含相当大的条目,我很难保持它足够宽以至于数字不会换行。我想一个nowrap按列的论点或一个column.width论点都可以解决这个问题,但我似乎也找不到。有没有办法做到这一点?还是我应该满足于“相当不错”?

4

2 回答 2

4

我知道我参加聚会有点晚了,但这里有一些你可以去的方法。为了记录,有很多方法可以调整这些表格,让它们看起来完全符合您的要求。因此,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(' ', '&nbsp;', 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 都不是)。

我敢肯定还有其他类似的选择。例如,您可以尝试在列标签中插入宽度标签。

于 2014-11-18T18:24:24.860 回答
1

控制列宽

(以及其他行、列或单元格样式元素)

埋在 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 参数”部分还解释了如何控制每个表格单元格的样式。

于 2020-09-11T23:25:34.813 回答