【问题标题】:Knitr xtable row color result in 2nd table in the row header cell blacked outKnitr xtable 行颜色导致行标题单元格中的第二个表变黑
【发布时间】:2013-09-28 23:15:28
【问题描述】:

亲爱的 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}

输出:

我的 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   

【问题讨论】:

  • 我可以确认一下,我会看看那里发生了什么。

标签: r knitr xtable alternating


【解决方案1】:

很容易解决:只需将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}

所以表格末尾多了一个命令\rowcolor[gray]{0.90},由于某种原因对下一个表格有副作用。解决办法是不要在最后一行后面加上\rowcolor[gray]{0.90},这就是为什么你必须生成从1到nrow(data) - 1的序列而不是nrow(data)

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

【讨论】:

  • +1 表示 Q 和 A,顺便说一句,如何强制输出尊重灰色阴影框的长度?
  • @doctorate 我想没有什么神奇的方法,或者你可以为此编写一个包装函数
  • 抱歉,回复晚了,您能否请我参考一个使用包装函数实现此功能的好例子?你真是太好了。
猜你喜欢
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2018-06-29
  • 2016-05-04
  • 2015-09-10
  • 1970-01-01
相关资源
最近更新 更多