2

xtable (pander.table にもこの問題があります) を取得して、テーブルをレンダリングし、ギリシャ文字の Latex を手動で入力することなく、print 関数内のデータ フレームの列にギリシャ文字を割り当てるにはどうすればよいですか?

再現可能な例のデータは次のとおりです。

#data in 
chiSq <- 1600
df <- 850
p <- 0.95
CFI <- 0.95
TLI <- 0.95 
RMSEA <- 0.04
LOWRMSEA <- 0.03
HIGHRMSEA <- 0.04

私は通常、このようなデータ フレームをいくつか持っています。

fit.stat <- data.frame(chiSq, df, p, CFI, TLI, RMSEA, LOWRMSEA, HIGHRMSEA)

xtable を使用してデータ フレームのテーブルを作成するときに、定期的に遭遇する特定の問題を次に示します。

  • 私がやりたいことは、chiSq をカイ 2 乗の記号に変更することです。ラテックスでは、これ$x^2$により適切なシンボルがレンダリングされます。
  • p もイタリック体にする必要があります。
  • 最後に、LOWRMSEA と HIGHRMSEA は上限と下限です。信頼区間と同じように、列名を削除して RMSEA の列にデータを含めてほしいと思います。

これを行うために私が見つけた唯一の方法は、このコマンドで最初にテーブルを印刷することです

library(xtable)
print(xtable(fit.stat, caption = "Model Fit Information for CFA"), 
caption.placement="top",
type = "latex")

これが生成されます:

\begin{table}[ht]
\centering
\caption{Model Fit Information for CFA}
\begin{tabular}{rrrrrrrrr}
  \hline
 & chiSq & df & p & CFI & TLI & RMSEA & LOWRMSEA & HIGHRMSEA \\ 
  \hline
1 & 1600.00 & 850.00 & 0.95 & 0.95 & 0.95 & 0.04 & 0.03 & 0.04 \\ 
   \hline
\end{tabular}
\end{table}

ただし、これを作成するには、テーブルを手動で編集する必要があります。

\begin{table}[ht]
\centering
\caption{Model Fit Information for CFA}
\begin{tabular}{rrrrrrrrrrrr}
  \hline
 & $x^2$ & {\it df} & {\it p} & CFI & TLI & RMSEA\\ 
  \hline
&1600.00 & 850.00 & 0.00 & 0.95 & 0.95 & 0.04 (0.03 - 0.04) \\ 
   \hline
\end{tabular}
\end{table}

マークダウンドキュメントにコードチャンクとして含めることができるように、テーブルを手動で編集せずにこれを動的に実行できるようにしたいと考えています。ありがとう。

4

1 に答える 1

0

RMSEA と LOWRMSEA と HIGHRMSEA の値をマージする限り、おそらく data.frame に貼り付けるのが最適です。例えば

fit.stat <- data.frame(chiSq, df, p, CFI, TLI, 
    RMSEA = paste0(RMSEA , " (",LOWRMSEA," - ", HIGHRMSEA,")"))

print.xtable次に、列名については、カスタム関数を指定してサニタイズ機能をオーバーライドできますsanitize。すでにお気づきだと思いますが、通常、すべての「特別な」LaTeX 文字は、レイアウトに干渉しないように削除またはエスケープされます。しかし、ここで、代わりに実行する関数を作成できます。まず、関数を定義します

formatcolheads<-function(x) {
    sanitize<-get("sanitize", parent.frame())
    x<-sanitize(x)
    x<-gsub("chiSq","$x^2$",x)
    x<-gsub("df","{\\\\it df}",x)
    x<-gsub("p","{\\\\it p}",x)
    x
}

sanitize問題がないことを確認するためだけに、デフォルトの関数を取得して列に対して実行するために少し作業を行っていることに注意してください。次に、変更したい値を置き換えます。「それ」のエスケープスラッシュを二重にする必要があることに注意してください。しかし、次のように関数を使用します

print(xtable(fit.stat, caption = "Model Fit Information for CFA"), 
caption.placement="top", sanitize.colnames.function = formatcolheads,
type = "latex")

そしてそれが生み出す

\begin{table}[ht]
\centering
\caption{Model Fit Information for CFA} 
\begin{tabular}{rrrrrrl}
  \hline
 & $x^2$ & {\it df} & {\it p} & CFI & TLI & RMSEA \\ 
  \hline
1 & 1600.00 & 850.00 & 0.95 & 0.95 & 0.95 & 0.04 (0.03 - 0.04) \\ 
   \hline
\end{tabular}
\end{table}

これは、希望する出力のようです。

于 2014-07-04T03:55:32.620 に答える