hwriter:更改data.table或data.frame的标题行颜色(不带行名称)
我正在尝试使用hwriter包生成HTML表。我想更改标题行和其他行的背景色,但在使用不带row.names的data.frame时,我无法做到这一点:hwriter:更改data.table或data.frame的标题行颜色(不带行名称),r,data.table,R,Data.table,我正在尝试使用hwriter包生成HTML表。我想更改标题行和其他行的背景色,但在使用不带row.names的data.frame时,我无法做到这一点: library(hwriter) # Correctly changes the header row color cat(hwrite(iris[1:3,],row.bgcolor=list('#aaffaa'))) ## <table border="1"> ## <tr> ## <td></t
library(hwriter)
# Correctly changes the header row color
cat(hwrite(iris[1:3,],row.bgcolor=list('#aaffaa')))
## <table border="1">
## <tr>
## <td></td><td bgcolor="#aaffaa">Sepal.Length</td><td bgcolor="#aaffaa">Sepal.Width</td><td bgcolor="#aaffaa">Petal.Length</td><td bgcolor="#aaffaa">Petal.Width</td><td bgcolor="#aaffaa">Species</td></tr>
## <tr>
## <td>1</td><td>5.1</td><td>3.5</td><td>1.4</td><td>0.2</td><td>setosa</td></tr>
## <tr>
## <td>2</td><td>4.9</td><td>3.0</td><td>1.4</td><td>0.2</td><td>setosa</td></tr>
## <tr>
## <td>3</td><td>4.7</td><td>3.2</td><td>1.3</td><td>0.2</td><td>setosa</td></tr>
## </table>
# Now changes row 1 and row 2, instead of header row and row 1
cat(hwrite(iris[1:3,],row.bgcolor=list('#aaffaa','#aaffaa')))
## <table border="1">
## <tr>
## <td></td><td>Sepal.Length</td><td>Sepal.Width</td><td>Petal.Length</td><td>Petal.Width</td><td>Species</td></tr>
## <tr>
## <td>1</td><td bgcolor="#aaffaa">5.1</td><td bgcolor="#aaffaa">3.5</td><td bgcolor="#aaffaa">1.4</td><td bgcolor="#aaffaa">0.2</td><td bgcolor="#aaffaa">setosa</td></tr>
## <tr>
## <td>2</td><td bgcolor="#aaffaa">4.9</td><td bgcolor="#aaffaa">3.0</td><td bgcolor="#aaffaa">1.4</td><td bgcolor="#aaffaa">0.2</td><td bgcolor="#aaffaa">setosa</td></tr>
## <tr>
## <td>3</td><td>4.7</td><td>3.2</td><td>1.3</td><td>0.2</td><td>setosa</td></tr>
## </table>
库(hwriter)
#正确更改标题行颜色
cat(hwrite(iris[1:3],row.bgcolor=list('#aaffaa'))
##
##
##萼片长度萼片宽度花瓣长度花瓣宽度种
##
##15.13.51.40.2埃托萨
##
##24.93.01.40.2塞托萨
##
##34.73.21.30.2埃托萨
##
#现在更改第1行和第2行,而不是标题行和第1行
cat(hwrite(iris[1:3],row.bgcolor=list('aaffaa','aaffaa'))
##
##
##萼片长度萼片宽度花瓣长度花瓣宽度种
##
##15.13.51.40.2埃托萨
##
##24.93.01.40.2塞托萨
##
##34.73.21.30.2埃托萨
##
是否有任何解决方法或我被迫使用行名称?我的问题是我大量使用data.tables,而它们没有行名…您可以随时为
data.table
编写自己的hwrite
方法。例如,以下各项应起作用:
# required packages
pkgs2load <- c('hwriter', 'data.table')
sapply(pkgs2load, require, character.only=TRUE)
# data.table hwrite method
hwrite.data.table <- function(x, ...){
# change x to matrix
mat <- as.matrix(x)
rownames(mat) <- 1L:nrow(mat)
# change row.bgcolor appropriately
lst <- list(...)
if (length(lst$row.bgcolor) > 1 & is.null(names(lst$row.bgcolor)))
names(lst$row.bgcolor) <- c('', 1L:(length(lst$row.bgcolor)-1L))
# call hwrite
do.call(hwrite, c(list(mat), lst))
}
dt <- data.table(iris[1:3,])
cat(hwrite(dt,row.bgcolor=list('#aaffaa', '#aaffaa')))
## <table border="1">
## <tr>
## <td></td><td bgcolor="#aaffaa">Sepal.Length</td><td bgcolor="#aaffaa">Sepal.Width</td><td bgcolor="#aaffaa">Petal.Length</td><td bgcolor="#aaffaa">Petal.Width</td><td bgcolor="#aaffaa">Species</td></tr>
## <tr>
## <td>1</td><td bgcolor="#aaffaa">5.1</td><td bgcolor="#aaffaa">3.5</td><td bgcolor="#aaffaa">1.4</td><td bgcolor="#aaffaa">0.2</td><td bgcolor="#aaffaa">setosa</td> ## </tr>
## <tr>
## <td>2</td><td>4.9</td><td>3.0</td><td>1.4</td><td>0.2</td><td>setosa</td></tr>
## <tr>
## <td>3</td><td>4.7</td><td>3.2</td><td>1.3</td><td>0.2</td><td>setosa</td></tr>
## </table>
#必需的软件包
pkgs2load在data.table
中有一个选项keep.rownames
,但它会生成一个column@akrun不幸的是,它没有工作…谢谢@shadow,但它看起来是一个复杂的解决方案,应该很简单。。。如果我需要这样做,那么我只需要使用as.data.frame并继续进行。