This existing question 涵盖了一种通过对 print.xtable()
的输出进行后处理来改变 latex 表中行颜色的方法,但我认为可以通过使用 stats.stackexchange 中描述的 add.to.row
的 print.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/