这个现有的问题涵盖了一种通过对来自 的输出进行后处理来在乳胶表中交替行颜色的方法print.xtable()
,但我认为可以通过使用stats.stackexchange上描述的add.to.row
参数来实现相同的目的,从而避免了对 post-处理,这对 Sweave 来说很好。该答案涉及为特定行的背景着色,但我认为它可以扩展到为所有奇数行着色。print.xtable()
我遇到的问题与add.to.row
参数有关,使 listpos
的长度等于 character vector 的长度command
。帮助文件print.xtable()
描述:
add.to.row:两个组件的列表。第一个组件(应该称为“pos”)是一个列表,其中包含应在末尾添加额外命令的行的位置,第二个组件(应该称为“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。