4

この既存の質問は、からの出力を後処理することによってラテックステーブルの行の色を変更する方法をカバーしていますが、 stats.stackexchangeで説明されているの引数を使用して、後処理の必要性を回避するprint.xtable()ことで同じことを達成できると思います。Sweaveでうまくいく処理。その答えは、特定の1つの行の背景の色付けを扱っていますが、すべての奇数行の色付けに拡張できると思います。add.to.rowprint.xtable()

私が遭遇している問題は、リストの長さを文字ベクトルの長さと等しくするadd.to.rowという引数に関係しています。のヘルプファイルには、次の説明があります。poscommandprint.xtable()

add.to.row:2つのコンポーネントのリスト。最初のコンポーネント(「pos」と呼ばれる必要があります)は、最後に追加のコマンドを追加する必要がある行の位置を含むリストです。2番目のコンポーネント(「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である必要があります。

4

1 に答える 1

7

秘訣はリストを平らにすることです。よりきれいな方法があるかもしれません、以下はトリックをします。

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に色が付きます。

于 2013-01-31T18:07:41.173 に答える