hwriter:更改data.table或没有行名称的data.frame的标题行颜色

时间:2014-12-19 08:17:35

标签: 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></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而且他们没有行名......

1 个答案:

答案 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>