2012-06-22 2 views
3

Я хотел бы, чтобы xtable НЕ перевернул мои дублированные записи в розовом стиле. Рассмотрим следующий MWE:Over-ride rownames переименование дубликатов с помощью xxtable

> require(xtable) 
> foo <- matrix(0, 2,2) 
> rownames(foo) = rep("bar", 2) 
> foo 
    [,1] [,2] 
bar 0 0 
bar 0 0 
> xtable(foo) 
% latex table generated in R 2.15.0 by xtable 1.7-0 package 
% Fri Jun 22 13:59:36 2012 
\begin{table}[ht] 
\begin{center} 
\begin{tabular}{rrr} 
    \hline 
& 1 & 2 \\ 
    \hline 
1 & 0.00 & 0.00 \\ 
    2 & 0.00 & 0.00 \\ 
    \hline 
\end{tabular} 
\end{center} 
\end{table} 
Warning message: 
In data.row.names(row.names, rowsi, i) : 
    some row.names duplicated: 2 --> row.names NOT used 

Вместо того, чтобы в rownames быть 1 и 2, я хочу, чтобы мой оригинальный «бар» и «бар». Есть ли способ переубедить схему дублирования замены xxtable?

+0

Это не xtable. Запустите 'data.frame (foo)'. Используйте dataframe, добавьте имена строк в качестве первого столбца и сообщите xtable, чтобы подавить имена реальных строк. – joran

+0

Это творческое решение! Пожалуйста, отправьте это как ответ, так как он сделал трюк. –

ответ

4

Вот xtable раствор (в очень компактной форме):

> print(xtable(data.frame(row = rownames(foo),data.frame(foo))),include.rownames = FALSE) 
% latex table generated in R 2.14.2 by xtable 1.6-0 package 
% Fri Jun 22 14:24:59 2012 
\begin{table}[ht] 
\begin{center} 
\begin{tabular}{lrr} 
    \hline 
row & X1 & X2 \\ 
    \hline 
bar & 0.00 & 0.00 \\ 
    bar & 0.00 & 0.00 \\ 
    \hline 
\end{tabular} 
\end{center} 
\end{table} 

Это еще пнуть предупреждение, и это будет трудно получить ваши заголовки столбцов вправо. Другой вариант заключается в использовании latex из Hmisc пакета , что довольно немного более гибкие (но и более сложные, вы можете отключить многоколоночном материал):

library(Hmisc) 
> latex(foo,file = "") 
% latex.default(foo, file = "") 
% 
\begin{table}[!tbp] 
\begin{center} 
\begin{tabular}{lrr} 
\hline\hline 
\multicolumn{1}{l}{foo}&\multicolumn{1}{c}{}&\multicolumn{1}{c}{}\tabularnewline 
\hline 
bar&$0$&$0$\tabularnewline 
bar&$0$&$0$\tabularnewline 
\hline 
\end{tabular} 
\end{center} 
\end{table} 

Извините за лаконичный комментарий. В то время я держал ребенка.

+0

Ваше первое предложение, использующее data.frame и столбец с именами строк, дает мне желаемый результат. Никаких извинений, необходимых в комментарии, - это было достаточно намека на то, чтобы получить желаемый результат! –