This existing question涵盖了通过对print.xtable()
的输出进行后处理来替换乳胶表中的行颜色的方法,但我认为使用add.to.row
可以实现相同的目的。在stats.stackexchange上描述的print.xtable()
的参数,避免了后处理的需要,这对于Sweave很好。该答案涉及着色一个特定行的背景,但我认为它可以扩展为着色所有奇数行。
我遇到的问题与add.to.row
参数有关,使列表pos
的长度等于字符向量command
的长度。 print.xtable()
的帮助文件描述了:
add.to.row:两个组件的列表。第一个组成部分(应该是 被称为'pos')的列表包含行的位置 应该在最后添加哪些额外的命令,第二个 component(应该称为'command')是一个字符 第一个组成部分长度相同的矢量 包含应该在结尾处添加的命令 指定的行。默认值为“NULL”,即不添加 命令。
使用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。
答案 0 :(得分: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}
乳胶的格式有点难看,因为\rowcolor
应该在行之前来到,即使我们指定1,3,5,9我们也会着色2,4,6,8的输出。