This existing question 涵盖了一种通过对 print.xtable() 的输出进行后处理来改变 latex 表中行颜色的方法,但我认为可以通过使用 stats.stackexchange 中描述的 add.to.rowprint.xtable() 参数来实现相同的目的,从而避免了后处理,这对 Sweave 很好。该答案涉及为特定行的背景着色,但我认为它可以扩展到为所有奇数行着色。

我遇到的问题与 add.to.row 参数有关,使列表 pos 的长度等于字符向量 command 的长度。 print.xtable() 的帮助文件描述:



使用 longtable 环境时,您可以使用此 add.to.row 参数来定义应在每一页上打印的表的“标题”行,如下所示:

library(xtable)
my.df=data.frame(a=c(1:10),b=letters[1:10])
print(xtable(my.data.frame,caption="My Table"),
      tabular.environment="longtable",
      floating=FALSE,
      hline.after=c(-1,nrow(my.data.frame)),
      add.to.row=list(pos=list(0),command="\\hline \\endhead ")

我需要保留这个功能,并添加额外的功能,每隔一行应该得到命令 \\rowcolor[gray]{0.8}
听起来很简单。 pos 应该类似于 list=(0,1,3,5,7,9) 并且 command 应该类似于 c("\\hline \\endhead ","\\rowcolor[gray]{0.8}","\\rowcolor[gray]{0.8}","\\rowcolor[gray]{0.8}","\\rowcolor[gray]{0.8}","\\rowcolor[gray]{0.8}")
当然,我想利用一些内置函数来构建奇数行序列和 "\\rowcolor[gray]{0.8}" 的重复,所以我想到了:
pos=list(0,seq(from=1,to=nrow(my.df),by=2))


command=c("\\hline \\endhead ",
          rep("\\rowcolor[gray]{0.8}",length(seq(from=1,to=nrow(my.df),by=2))))

我的问题是上面的 pos 列表评估为:
> pos
[[1]]
[1] 0

[[2]]
[1] 1 3 5 7 9

它的长度为 2...在这种情况下它需要长度为 6。

最佳答案

诀窍是将列表弄平。
可能有更漂亮的方法,以下是诀窍。

pos=list(as.list(c(0,seq(from=1,to=nrow(my.df),by=2))))[[1]]

整个包然后是:
library(xtable)
my.df=data.frame(a=c(1:10),b=letters[1:10])

print(xtable(my.df,caption="My Table"),
      tabular.environment="longtable",
      floating=FALSE,
      hline.after=c(-1,nrow(my.df)),
      add.to.row=list(
      pos=list(as.list(c(0,seq(from=1,to=nrow(my.df),by=2))))[[1]],
      command=c("\\hline \\endhead ",
      rep("\\rowcolor[gray]{0.8}",length(seq(from=1,to=nrow(my.df),by=2)))))
      )

产生
% latex table generated in R 2.14.2 by xtable 1.7-0 package
% Thu Jan 31 12:52:55 2013
\begin{longtable}{rrl}
  \hline
 & a & b \\
  \hline \endhead 1 &   1 & a \\
   \rowcolor[gray]{0.8}2 &   2 & b \\
  3 &   3 & c \\
   \rowcolor[gray]{0.8}4 &   4 & d \\
  5 &   5 & e \\
   \rowcolor[gray]{0.8}6 &   6 & f \\
  7 &   7 & g \\
   \rowcolor[gray]{0.8}8 &   8 & h \\
  9 &   9 & i \\
   \rowcolor[gray]{0.8}10 &  10 & j \\
   \hline
\hline
\caption{My Table}
\end{longtable}

latex 的格式有点难看,因为 \rowcolor 应该在行之前,即使我们指定了 1,3,5,9,我们也会在输出的 2,4,6,8 上着色。

关于r - sweave、xtable、longtable 和交替行颜色…… `add.to.row` 的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14632307/

10-13 02:58