2013-01-31 41 views
3

This existing question涵蓋了一種方法來交替乳膠表中的行顏色後處理輸出從print.xtable(),但我認爲這是可能的如stats.stackexchange所述,通過使用print.xtable()的參數add.to.row來實現相同的目的,避免了後處理的需要,這對於Sweave來說是很好的。該答案處理着色一個特定行的背景,但我認爲它可以擴展到着色所有奇數行。sweave,xtable,longtable和交替的行顏色...問題與'add.to.row`

我遇到的問題與add.to.row參數有關,使得列表pos的長度等於字符向量的長度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}")

當然,我想利用一些內置的功能來構建奇數列序列和重複,所以我想的:

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。

回答

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上着色。

+0

'unlist()'也可以使列表變平。 – mac