我正在尝试使用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></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>
是否有任何解决方法或我被迫使用行名?我的问题是我广泛使用data.tables而且他们没有行名......
答案 0 :(得分:2)
您可以随时为hwrite
编写自己的data.table
方法。例如,以下内容应该有效:
# 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>