Knitr xtable行颜色导致行标题单元格中的第二个表格变黑

Jia*_*ang 11 r alternating xtable knitr

亲爱的R xtable和knitr用户:我几天来一直在努力解决这个问题,我很惊讶没有一个人已经报道过类似的案例.非常感谢您的见解和帮助.

我使用xtable制作两个或更多表.表中的行交替着色.第一张表很好.但从第二个表(或更多)开始,最左边的标题单元格总是变黑.

不幸的是,这是非常可重复的.在第一张漂亮的桌子后,我总是得到完全相同的黑色标题.以下是重现它的代码:

\documentclass{article}
\usepackage{booktabs}
\usepackage{colortbl, xcolor}

\begin{document}
<<echo=TRUE,results='asis'>>=
employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, 23400, 26800)

mydata <- data.frame(employee, salary)
rws <- seq(1, (nrow(mydata)), by = 2)
col <- rep("\\rowcolor[gray]{0.90}", length(rws))
library(xtable)
print(xtable(mydata, caption="Test"), booktabs = TRUE, 
      include.rownames = FALSE, caption.placement = "top",
      sanitize.colnames.function = identity,
      add.to.row = list(pos = as.list(rws), command=col))

print(xtable(mydata, caption="Test"), booktabs = TRUE, 
      include.rownames = FALSE, caption.placement = "top",
      sanitize.colnames.function = identity,
      add.to.row = list(pos = as.list(rws), command=col))
@

\end{document}
Run Code Online (Sandbox Code Playgroud)

输出:

xtable输出

而我的sessionInfo()如下:

> sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] digest_0.6.3   evaluate_0.4.7 formatR_0.9    knitr_1.4.1    stringr_0.6.2  tools_3.0.1   
Run Code Online (Sandbox Code Playgroud)

Yih*_*Xie 11

它很容易修复:只需更改nrow(mydata)nrow(mydata) - 1,您将不再看到黑色单元格.

这里潜在的问题非常微妙:你有3行,然后seq(1, nrow(mydata), by = 2)给你c(1, 3),然后你告诉你在第一行和第三行之后xtable添加\rowcolor[gray]{0.90},这会生成下面的表:

\begin{tabular}{lr}
  \toprule
employee & salary \\
  \midrule
John Doe & 21000.00 \\
   \rowcolor[gray]{0.90}Peter Gynn & 23400.00 \\
  Jolie Hope & 26800.00 \\
   \rowcolor[gray]{0.90} \bottomrule  % <-- the problem is here
\end{tabular}
Run Code Online (Sandbox Code Playgroud)

因此\rowcolor[gray]{0.90}在表的末尾有一个额外的命令,由于某种原因它对下一个表有副作用.解决方案是你不应该\rowcolor[gray]{0.90}在最后一行之后添加,这就是你必须从1生成序列nrow(data) - 1而不是生成序列的原因nrow(data).

现在您应该看到预期的输出: