我可以在htmlTable中控制自动换行或列宽吗?

时间:2014-08-21 03:04:13

标签: r gmisc

我爱上了htmlTable()包中的Gmisc函数。我的桌子比以前漂亮得多。在我的表中,我有一个列有相当大的条目,我很难保持足够宽,数字不会换行。我可以想象一个nowrap参数列或column.width参数可以用于此,但我似乎也找不到。有没有办法做到这一点?或者我应该满足于“相当不错”?

2 个答案:

答案 0 :(得分:4)

我知道我参加派对有点晚了,但这里有几种方法可以解决。为了记录,有很多方法可以调整这些表格,使它们看起来完全符合您的需要。所以IMO的选择是1)为每个单元格着色选项,单元格高度和宽度,行高和宽度,列高和宽度等提供各种参数;或2)让用户想出一些东西。

这里说的是一些可能的解决方案:

library(Gmisc)

## solution 1: quick, dirty
tbl <- `colnames<-`(matrix(1:9, 3, 3), c('one','two','three'))
(tmp <- htmlTable(tbl))

enter image description here

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

enter image description here

tbl[1,1] <- gsub(' ', '&nbsp;', tbl[1,1])
htmlTable(tbl)

enter image description here

基本上只是折叠任何空格并使用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))

enter image description here

上面的解决方案将所有单元格样式(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)。

我确定还有其他类似的选项。例如,您可以尝试在列标记中插入宽度标记。

答案 1 :(得分: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参数”部分还介绍了如何控制每个表单元格的样式。