Убедитесь, что все ячейки имеют 3 цифры в представлении LaTeX, используя xtable

У меня есть следующий кадр данных:

> dput(py6s_pwc_16)
structure(list(source = c("AERONET", "BIGF", "MODIS"), ndvi_real = c(0.618, 
0.618, 0.618), ndvi_95 = c("0.616", "0.616", "0.615"), ndvi_05 = c("0.62", 
"0.62", "0.621"), perc_95 = c("-0.288", "-0.315", "-0.431"), 
    perc_05 = c("0.374", "0.289", "0.471")), .Names = c("source", 
"ndvi_real", "ndvi_95", "ndvi_05", "perc_95", "perc_05"), row.names = c(NA, 
-3L), class = "data.frame")

Когда я просто распечатываю его в командной строке R, он выглядит так:

> py6s_pwc_16
   source ndvi_real ndvi_95 ndvi_05 perc_95 perc_05
1 AERONET     0.618   0.616    0.62  -0.288   0.374
2    BIGF     0.618   0.616    0.62  -0.315   0.289
3   MODIS     0.618   0.615   0.621  -0.431   0.471

Я хочу создать LaTeX-представление этой таблицы, используя xtable. Я пытаюсь сделать это с помощью следующего кода:

x <- xtable(py6s_pwc_16)
digits(x) <- 3
print(x, include.rownames=FALSE, table.placement=NULL, latex.environments=NULL, size="\\centering", booktabs=TRUE, sanitize.colnames.function=add_bold)

Однако это создает код LaTeX, который выглядит следующим образом (просто фрагмент внутри таблицы):

AERONET & 0.618 & 0.616 & 0.62 & -0.288 & 0.374

Как видите, в четвертом столбце нет трех цифр — это просто 0,62, а я бы хотел, чтобы это было 0,620. Есть ли способ заставить xtable сделать это?

Я пробовал добавить строку:

display(x) <- rep("fg", ncol(x)+1)

попытаться заставить R использовать значащие цифры, а не цифры, но это не меняет результат.

Любые идеи?


person robintw    schedule 18.07.2012    source источник


Ответы (1)


Это происходит потому, что ваши данные содержат character вместо numeric:

str(py6s_pwc_16)
'data.frame':   3 obs. of  6 variables:
 $ source   : chr  "AERONET" "BIGF" "MODIS"
 $ ndvi_real: num  0.618 0.618 0.618
 $ ndvi_95  : chr  "0.616" "0.616" "0.615"
 $ ndvi_05  : chr  "0.62" "0.62" "0.621"
 $ perc_95  : chr  "-0.288" "-0.315" "-0.431"
 $ perc_05  : chr  "0.374" "0.289" "0.471"

Чтобы исправить это, преобразуйте столбцы chr в числовые:

py6s_pwc_16[, 2:6] <- lapply(py6s_pwc_16[2:6], as.numeric)

Затем запустите xtable:

library(xtable)
xtable(py6s_pwc_16, digits=3)

% latex table generated in R 2.15.0 by xtable 1.7-0 package
% Wed Jul 18 12:00:33 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rlrrrrr}
  \hline
 & source & ndvi\_real & ndvi\_95 & ndvi\_05 & perc\_95 & perc\_05 \\ 
  \hline
1 & AERONET & 0.618 & 0.616 & 0.620 & -0.288 & 0.374 \\ 
  2 & BIGF & 0.618 & 0.616 & 0.620 & -0.315 & 0.289 \\ 
  3 & MODIS & 0.618 & 0.615 & 0.621 & -0.431 & 0.471 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}
person Andrie    schedule 18.07.2012