2012-03-11 16 views
8

Hãy để tôi tạo một số dữ liệu trước khi đặt câu hỏi.Tạo bảng cao su từ đối tượng có thể đặt trong 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) 

result1 trông giống như ..

 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 

Tôi thực sự viết một bài báo sử dụng knitr gói. Có cách nào để chuyển đổi result1 thành một bảng latex tự động khi tệp * .rnw của tôi được tuân thủ không?

Tôi đã thử với xtable nhưng đã nhận lỗi sau đây ...

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

Cảm ơn bạn @DWin và @Yihui. Ngoài latex(), tôi cũng sử dụng xtable như đã nêu dưới

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

Để loại bỏ tên hàng không cần thiết tôi đã làm sau khi

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

Trả lời

4

Phương pháp 1:

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

latex (ftable2data.frame (result1)) dường như không phản hồi @ DWin –

+0

Bạn hỗ trợ cài đặt LaTeX có thể khác với của tôi. –

+1

Tôi đoán bạn cần phải ngăn chặn 'latex()' tự động biên dịch tệp tex (theo mặc định): sử dụng 'latex (ftable2data.frame (result1), file = '')'; cũng nhớ đặt tùy chọn chunk 'results = asis' hoặc' results = tex' –

5

Là một thay thế, memisc cung cấp các phương thức toLatex cho các đối tượng ftable.

library(memisc) 
toLatex(result1) 
2

Bạn có thể sử dụng gói xtable:

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

Tôi không biết nó như thế nào so với các tùy chọn khác được đưa ra.

0

Sử dụng chức năng toLatex() được cung cấp bởi gói simsalapar.

library(simsalapar) 
toLatex(result1) 
1

Building tắt của câu trả lời user2030503 của,

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

Chức năng toLatex là một S3 chung để đi đến simsalapar:::toLatex.ftable() khi đưa một đối tượng ftable. Hoặc bạn chỉ có thể làm simsalapar:::toLatex.ftable(result1).

Khi đã xong, tôi cần bao gồm \usepackage{booktabs} trong phần mở đầu cao su như toLatex.ftable sử dụng \toprule. Hoặc bạn có thể vượt qua booktabs=FALSE.

Nó cũng giống như toLatex.ftable cắt tỉa các số không theo sau. Để khắc phục điều này là những gì tôi đã làm (xem câu trả lời cho Formatting Decimal places in R cho format()):

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

này chuyển đổi ma trận của ftable để một ma trận nhân vật, nhưng toLatex.ftable vẫn hoạt động.

Tôi cũng thấy hữu ích khi \usepackage{pdflscape} và bọc bảng của tôi bằng \begin{landscape}\end{landscape} vì các bảng dự phòng này có thể khá rộng.

Các vấn đề liên quan