gpt4 book ai didi

r - sweave、xtable、longtable 和交替行颜色... `add.to.row` 的问题

转载 作者:行者123 更新时间:2023-12-01 08:07:06 25 4
gpt4 key购买 nike

This existing question通过对 print.xtable() 的输出进行后处理,介绍了一种在 latex 表中交替行颜色的方法。 ,但我认为可以通过使用 add.to.row 来达到同样的目的。 print.xtable() 的论据如 stats.stackexchange 所述,避免后处理的需要,这对 Sweave 来说很好。该答案涉及为特定行的背景着色,但我认为它可以扩展到为所有奇数行着色。

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

add.to.row: a list of two components. The first component (which should be called 'pos') is a list contains the position of rows on which extra commands should be added at the end, The second component (which should be called 'command') is a character vector of the same length of the first component which contains the command that should be added at the end of the specified rows. Default value is 'NULL', i.e. do not add commands.



使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com