2012-03-11 13 views
8

Pozwól mi utworzyć kilka danych, zanim zadaję pytanie.Tworzenie tabeli lateksowej z obiektu nadającego się do użytku w R

my.data <- data.frame(A = sample(seq(1,100,by=5),10,replace=TRUE),W = rnorm(10),X =sample(1:10),Y = sample(c("yes", "no"), 10, replace = TRUE),Z=sample(c('a','b','c','d'),10,replace=TRUE)) 

attach(my.data) 

my.d <- xtabs(W~Z+Y+A);my.d 
table.data <- ftable(my.d) 

result1 <- round(table.data,2) 

wynik1 wygląda ..

 A  6 11 16 26 71 76 86 91 
Z Y              
a no  0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
yes 0.00 0.56 0.00 0.00 0.00 0.79 0.00 0.01 

b no  0.61 0.00 -0.22 0.14 0.00 0.00 -0.08 1.71 
    yes 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 

c no  0.00 0.00 0.00 0.00 -0.08 0.00 0.00 0.00 
    yes 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 

d no  0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 
    yes 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 

ja faktycznie pisania artykułu za pomocą pakietu knitr. Czy istnieje sposób transformacji wyniku result1 do tabeli lateksu automatycznie po spełnieniu mojego pliku * .rnw?

Próbowałem z xtable ale mam następujący błąd ...

Error in UseMethod("xtable") : no applicable method for 'xtable' applied to an object of class "ftable" 

Dziękuję @DWin i @Yihui. Oprócz lateksu(), to również xtable jak stwierdzono w

print(xtable(ftable2data.frame(result1))) 

Aby usunąć nazwy konieczne rzędu I tak następujące

print(xtable(ftable2data.frame(result1)),include.rownames=FALSE) 

Odpowiedz

4

Metoda 1:

require(MIfuns) 
require(Hmisc) 
latex(ftable2data.frame(result1)) 
+0

lateks (ftable2data.ramka (wynik1)) wydaje się nie odpowiadać @ DWin –

+0

Obsługa konfiguracji LaTeX może być inna niż moja. –

+1

Chyba musisz uniemożliwić 'latex()' automatyczne kompilowanie pliku tex (domyślnie): użyj 'latex (ftable2data.frame (result1), file = '')'; Pamiętaj także, aby ustawić opcję porcji 'results = asis' lub' results = tex' –

5

Alternatywnie memisc zapewnia metody toLatex dla obiektów ftable.

library(memisc) 
toLatex(result1) 
2

Można użyć pakietu xtable:

library(xtable) 
mytable=ftable(mydata) 
print(
    xtable(format(mytable)),file="~/Desktop/mytable.tex" 
) 

nie wiem jak to porównać do innych dostępnych opcji.

1

budynku off odpowiedzi user2030503, w

# install.packages('simsalapar') 
library(simsalapar) 
utils::toLatex(result1) 

Funkcja toLatex jest S3 generic więc przechodzi do simsalapar:::toLatex.ftable() gdy otrzyma ftable obiekt. Alternatywnie możesz po prostu zrobić simsalapar:::toLatex.ftable(result1).

Po wykonaniu tej czynności musiałem dołączyć \usepackage{booktabs} w preambule lateksu jako toLatex.ftable używa \toprule. Ewentualnie możesz podać booktabs=FALSE.

Wygląda również na to, że toLatex.ftable przycina ostatnie zera. Aby ustalić, że to co zrobiłem (patrz odpowiedź na Formatting Decimal places in R dla format()):

result1[1:nrow(result1),1:ncol(result1)] %<>% as.numeric %>% format(nsmall=2,digits=3) 

ten konwertuje matrycy ftable do matrycy znaków, ale toLatex.ftable nadal działa.

Znalazłem również pomocne dla \usepackage{pdflscape} i owinąć mój stół z \begin{landscape} i \end{landscape}, ponieważ te tabele kontyngencji mogą być dość szerokie.