SNAGeek

Sociologically Technological, and Technologically Sociological

xtableのエスケープを抑制する

xtableを使うとmatrixやdataframeをTeX形式の表に変換してくれて便利です。 しかし、表の中に数式などが含まれている場合、xtableの出力結果の中で _{ の前にエスケープ文字列 \ がつく場合があります。 当然、出力結果を貼り付けてそのままコンパイルすると、適切に数式が表示されません。

> library(tidyverse)
> library(xtable)
> 
> d <- tibble(Variable = c("$\\hat{X}$"),
+             Value = "0.1")
> xtable(d)
% latex table generated in R 3.5.3 by xtable 1.8-4 package
% Tue Jan 28 14:28:26 2020
\begin{table}[ht]
\centering
\begin{tabular}{rll}
  \hline
 & Variable & Value \\ 
  \hline
1 & \$$\backslash$hat\{X\}\$ & 0.1 \\ 
   \hline
\end{tabular}
\end{table}

xtableオブジェクトをprint関数に渡して以下のようにオプションを指定すると、エスケープしません。これは複数指定できます。

#列ラベルのエスケープを抑制したい場合
xtable(d) %>% print(sanitize.colnames.function = identity)
#行ラベルのエスケープを抑制したい場合
xtable(d) %>% print(sanitize.rownames.function = identity)
#各要素のエスケープを抑制したい場合
xtable(d) %>% print(sanitize.text.function = identity)

上の例で実際にやってみると、確かにエスケープされなくなります。

xtable(d) %>% print(sanitize.text.function = identity)
% latex table generated in R 3.5.3 by xtable 1.8-4 package
% Tue Jan 28 14:28:59 2020
\begin{table}[ht]
\centering
\begin{tabular}{rll}
  \hline
 & Variable & Value \\ 
  \hline
1 & $\hat{X}$ & 0.1 \\ 
   \hline
\end{tabular}
\end{table}

参考:

print.xtable function | R Documentation