В R, как остановить xtable от автоматического округления? - PullRequest
4 голосов
/ 25 октября 2011

Как отключить автоматическое округление в этом случае?

> x <- c(2.222, 3.333, 6.6666)
> df <- data.frame(x)
> df
       x
1 2.2220
2 3.3330
3 6.6666
> xtable(df)

Результаты в

% latex table generated in R 2.11.1 by xtable 1.5-6 package
% Tue Oct 25 12:13:08 2011
\begin{table}[ht]
\begin{center}
\begin{tabular}{rr}
  \hline
 & x \\ 
  \hline
  1 & 2.22 \\ 
  2 & 3.33 \\ 
  3 & 6.67 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}

Я не могу найти никакой опции в документах xtable , чтобы отключить ее.

Ответы [ 4 ]

10 голосов
/ 25 октября 2011

Как насчет digits?

xtable(df,digits=4)
% latex table generated in R 2.12.2 by xtable 1.5-6 package
% Tue Oct 25 11:39:25 2011
\begin{table}[ht]
\begin{center}
\begin{tabular}{rr}
  \hline
 & x \\ 
  \hline
1 & 2.2220 \\ 
  2 & 3.3330 \\ 
  3 & 6.6666 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}
0 голосов
/ 24 октября 2017

Вы можете сделать это, преобразовав все столбцы в строку, хотя это может привести к появлению предупреждающего сообщения:

> xtable(df, display=rep("s",ncol(df)+1))

% latex table generated in R 3.3.3 by xtable 1.8-2 package
% Tue Oct 24 12:43:58 2017
\begin{table}[ht]
\centering
\begin{tabular}{rr}
  \hline
 & x \\ 
  \hline
1 &  2.222 \\ 
  2 &  3.333 \\ 
  3 & 6.6666 \\ 
   \hline
\end{tabular}
\end{table}
Warning message:
In formatC(x = c(2.222, 3.333, 6.6666), format = "s", digits = 2,  :
  trasformo l'argomento in "character" in format="s"
0 голосов
/ 27 апреля 2017

Если вы уже отформатировали фрейм данных с предпочтительным округлением и не хотите перепечатывать цифры для каждого столбца, одним из решений является преобразование всего в текст.Я только что определил функцию, которую затем использую в другом месте вместо xtable:

myxtable <- function(x, ...) xtable(apply(x, 2, as.character), ...)

Тогда возвращаемое значение myxtable можно использовать везде, где вы будете использовать возвращаемое значение xtable,но с форматированием без изменений.

0 голосов
/ 25 октября 2011

См. Ответ @James для правильного ответа (я даже не проверял это, поскольку предположил, что @mmmasterluke действительно прочитал документы).

В качестве альтернативы вы можете использовать toLatex из пакета memisc:

library(memisc)
x <- c(2.222, 3.333, 6.6666)
df <- data.frame(x)
toLatex(df, digits=4)

дает вам

\begin{tabular}{D{.}{.}{4}}
\toprule
\multicolumn{1}{c}{x} \\
\midrule
2.2220 \\
3.3330 \\
6.6666 \\
\bottomrule
\end{tabular}

И у него есть множество других опций, которые вы можете использовать для настройки вашего латексного выхода.

...