hwriter:更改data.table或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

我正在尝试使用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>
库(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并继续进行。