2012-03-11 38 views
8

Permítanme crear algunos datos antes de hacer mi pregunta.Crear una tabla de látex desde el objeto ftable en 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) 

resultado1 parece ..

 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 

De hecho, estoy escribiendo un artículo usando knitr paquete. ¿Hay alguna manera de transformar result1 en una tabla de latex automáticamente cuando se cumple mi archivo * .rnw?

he intentado con xtable pero tiene el siguiente error ...

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

Gracias @DWin y @Yihui. Aparte de látex(), también usado XTABLE como se indica en

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

Para eliminar nombres de las filas innecesaria hice lo siguiente

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

Respuesta

4

Método 1:

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

látex (ftable2data.marco (resultado1)) no parece responder @ DWin –

+0

Es posible que la configuración de LaTeX sea diferente a la mía. –

+1

Supongo que debe evitar que 'latex()' compile automáticamente el archivo tex (de forma predeterminada): use 'latex (ftable2data.frame (result1), file = '')'; Recuerde también establecer la opción de fragmento 'results = asis' or' results = tex' –

5

Como alternativa, memisc proporciona métodos aLatex para objetos ftable.

library(memisc) 
toLatex(result1) 
2

Puede utilizar el paquete xtable:

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

No sé cómo se compara con las otras opciones que se ofrecen.

0

Utilice la función toLatex() proporcionada por el paquete simsalapar.

library(simsalapar) 
toLatex(result1) 
1

Building fuera de la respuesta de user2030503,

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

El toLatex función es un S3 genérico de modo pasa a simsalapar:::toLatex.ftable() cuando se le da un objeto ftable. Alternativamente, puede hacer simsalapar:::toLatex.ftable(result1).

Una vez hecho esto, necesitaba incluir \usepackage{booktabs} en el preámbulo del látex como toLatex.ftable utiliza \toprule. Alternativamente, puede pasar booktabs=FALSE.

También parece que toLatex.ftable recorta los ceros finales. Para solucionar que esto es lo que hice (véase la respuesta a Formatting Decimal places in R para format()):

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

Esto convierte la matriz de la ftable a una matriz de caracteres, pero toLatex.ftable todavía funciona.

También he encontrado que es útil \usepackage{pdflscape} y envolver mi mesa con \begin{landscape} y \end{landscape} porque estas tablas de contingencia pueden ser bastante amplia.

Cuestiones relacionadas