Выравнивание столбцов в выводе xtable - PullRequest
5 голосов
/ 08 февраля 2012

Я использую xtable для управления R выводом в Sweave. Смотрите код ниже:

CC <- data.frame(
    y = c(449, 413, 326, 409, 358, 291, 341, 278, 312)/12,
    P = ordered(gl(3, 3)), N = ordered(gl(3, 1, 9))
)
CC.aov <- aov(y ~ N * P, data = CC , weights = rep(12, 9))
Summary <- summary(CC.aov, split = list(N = list(L = 1, Q = 2),
                                        P = list(L = 1, Q = 2)))
Summary

            Df Sum Sq Mean Sq
N            2 1016.7   508.3
  N: L       1 1012.5  1012.5
  N: Q       1    4.2     4.2
P            2  917.4   458.7
  P: L       1  917.3   917.3
  P: Q       1    0.0     0.0
N:P          4  399.3    99.8
  N:P: L.L   1  184.1   184.1
  N:P: Q.L   1  152.1   152.1
  N:P: L.Q   1   49.0    49.0
  N:P: Q.Q   1   14.1    14.1

Мне нравится делать отступ в первом столбце, как показано в выводе выше. Но когда я использую xtable(Summary), первый столбец выравнивается по левому краю. Я знаю, как выровнять влево, вправо или по центру, но не мог понять, как получить результат с отступом в первом. Любая помощь в этом отношении будет высоко оценена. Спасибо

Ответы [ 2 ]

10 голосов
/ 08 февраля 2012

В этом примере показано, как настроить таблицу, комбинирующую использование аргумента sanitize в xtable и функции \hskip в латексе.

Код будет:

named = rownames(Summary[[1]])
tags= gsub("  "," ",named)
rownames(Summary[[1]])= c(ifelse(nchar(tags)<8,tags,paste("\\hskip .5cm",tags,sep=' ')))
print(xtable(Summary[[1]]), type="latex", sanitize.text.function = function(x){x})

РЕДАКТИРОВАТЬ: Следуя предложению Двина об использовании

grepl("^ ", rownames(Summary[[1]])

Это обеспечивает более общее решение. Код изменится на:

named = rownames(Summary[[1]])
tags= grepl("^ ", rownames(Summary[[1]]))
rownames(Summary[[1]])= c(ifelse(tags==F,named,paste("\\hskip .5cm",named,sep=' ')))
print(xtable(Summary[[1]]), type="latex", sanitize.text.function = function(x){x})

enter image description here

2 голосов
/ 08 февраля 2012

Отредактируйте вывод xtable, добавив еще один столбец и поместив пустые разделители столбцов из нового, для которого вы хотите сделать отступ: (и при условии соответствующего заголовка и нижнего колонтитула документа.)

\begin{tabular}{llrrr}
  \hline
& fac & Df & Sum Sq & Mean Sq \\ 
  \hline
N   &        & 2 & 1016.67 & 508.33 \\ 
 &  N: L      & 1 & 1012.50 & 1012.50 \\ 
 & N: Q      & 1 & 4.17 & 4.17 \\ 
P  &        & 2 & 917.39 & 458.69 \\ 
 &  P: L      & 1 & 917.35 & 917.35 \\ 
 &  P: Q      & 1 & 0.04 & 0.04 \\ 
N:P   &      & 4 & 399.28 & 99.82 \\ 
 & N:P: L.L  & 1 & 184.08 & 184.08 \\ 
 &N:P: Q.L  & 1 & 152.11 & 152.11 \\ 
 &N:P: L.Q  & 1 & 49.00 & 49.00 \\ 
 &N:P: Q.Q  & 1 & 14.08 & 14.08 \\ 
\hline
\end{tabular}

enter image description here

...