Công cụ để tạo bảng latex trong R [đã đóng]


268

Theo yêu cầu chung, wiki cộng đồng về sản xuất bảng latex trong R. Trong bài viết này tôi sẽ giới thiệu tổng quan về các gói và blog được sử dụng phổ biến nhất với mã để sản xuất bảng latex từ các đối tượng ít chuyển động hơn. Xin vui lòng thêm bất kỳ tôi đã bỏ lỡ, và / hoặc đưa ra lời khuyên, gợi ý và thủ thuật nhỏ về cách sản xuất các bảng latex được định dạng độc đáo với R.

Gói:

  • xtable : cho các bảng tiêu chuẩn của hầu hết các đối tượng đơn giản. Một bộ sưu tập tốt đẹp với các ví dụ có thể được tìm thấy ở đây .
  • memisc : công cụ quản lý dữ liệu khảo sát, chứa một số công cụ cho các bảng ước tính mô hình hồi quy (cơ bản).
  • Hmisc chứa một hàm latex()tạo tệp tex chứa đối tượng lựa chọn. Nó khá linh hoạt, và cũng có thể xuất longtablecác bảng latex. Có rất nhiều thông tin trong tệp trợ giúp?latex
  • miscFuncs có chức năng gọn gàng 'có thể lặp lại', chuyển đổi dữ liệu ma trận với các mục nhập chữ và số hỗn hợp thành bảng LaTeX và in chúng ra bàn điều khiển, để chúng có thể được sao chép và dán vào tài liệu LaTeX.
  • gói texreg ( giấy JSS ) chuyển đổi đầu ra mô hình thống kê thành các bảng LaTeX. Sáp nhập nhiều mô hình. Có thể đối phó với khoảng 50 loại mô hình khác nhau, bao gồm mô hình mạng và mô hình đa cấp (lme và lme4).
  • reporttools gói ( giấy JSS ) là một lựa chọn cho thống kê mô tả về liên tục, phân loại và biến ngày.
  • gói bảng có lẽ là gói tạo bảng LaTeX chung nhất trong R để thống kê mô tả
  • gói stargazer làm cho bảng tóm tắt mô hình thống kê so sánh tốt đẹp

Blog và đoạn mã

Câu hỏi liên quan :


4
Trên Xác thực chéo (stats.SE), bài đăng trên blog sau đây sẽ được độc giả quan tâm ở đây: Một số lưu ý khi tạo bảng hiệu quả .
gung - Phục hồi Monica

2
Bạn cũng có thể sử dụng ztable. Nó làm cho các bảng sọc ngựa vằn ở định dạng LaTeX và HTML dễ dàng. Nó khá linh hoạt và đơn giản: cran.r-project.org/web/packages/ztable/vignettes/ztable.html
SKAN

"Quy trình" được đề xuất để làm việc với nhiều bảng trong R (hoặc RStudio) và sử dụng chúng từ một chương trình latex bên ngoài, như TexStudio, để nhúng chúng vào một dự án lớn hơn nhiều là gì?
skan

1
@skan Đó là mủ cụ thể. Nếu bạn tạo tài liệu "trẻ em", bạn tạo chúng dưới dạng tài liệu latex và sử dụng includehoặc input. Bạn có thể sử dụng writeLines()mà làm việc với cả kable()xtable(). Lưu trữ dưới dạng tệp .tex và giải quyết vấn đề.
Joris Meys

1
OTOH, nếu bạn sử dụng nhiều tài liệu và muốn kết hợp chúng thành một tài liệu (bạn không rõ ràng về tài liệu đó), bạn tạo tài liệu và bạn sử dụng inputđể đưa một tài liệu vào tài liệu khác. Hướng dẫn sử dụng latex sẽ cho bạn biết rằng điều này giống như nhập nội dung của tài liệu vào địa điểm đó, do đó không cần phải sao chép-dán toàn bộ thiết lập bạn đã thực hiện trong phần mở đầu.
Joris Meys

Câu trả lời:


22

Tôi muốn thêm một đề cập đến gói "ủ". Bạn có thể viết tệp mẫu bia sẽ là LaTeX với trình giữ chỗ và sau đó "pha" nó lên để tạo tệp .tex để \ bao gồm hoặc \ nhập vào LaTeX của bạn. Cái gì đó như:

\begin{tabular}{l l}
A & <%= fit$A %> \\
B & <%= fit$B %> \\
\end{tabular}

Cú pháp brew cũng có thể xử lý các vòng lặp, vì vậy bạn có thể tạo một hàng bảng cho mỗi hàng của khung dữ liệu.


Gói R.rsp và chuỗi chức năng của nó () tương tự như brew :: brew (). Không chắc nó có tốt hơn không, nhưng gói chắc chắn có nhiều thứ hơn. Trong cả hai trường hợp, tôi thích cách tiếp cận này vì nó cho phép linh hoạt hơn trong mã tex trong khi không hy sinh khả năng tái tạo.
Richard DiSalvo

21

Cảm ơn Joris đã tạo ra câu hỏi này. Hy vọng, nó sẽ được tạo thành một wiki cộng đồng.

Các gói booktabs trong latex tạo ra các bảng trông đẹp mắt. Đây là một bài đăng trên blog về cách sử dụng xtable để tạo các bảng latex sử dụng booktabs

Tôi cũng sẽ thêm apsrtablegói vào hỗn hợp vì nó tạo ra các bảng hồi quy đẹp mắt.

Một ý tưởng khác: Một số các gói này (đặc biệt là memisc và apsrtable) cho phép mở rộng mã dễ dàng để tạo các bảng cho các đối tượng hồi quy khác nhau. Một ví dụ như vậy là mã memisc lme4 được hiển thị trong câu hỏi. Có thể có ý nghĩa khi bắt đầu một kho lưu trữ github để thu thập các đoạn mã như vậy và theo thời gian thậm chí có thể thêm nó vào gói memisc. Có ai nhận không?


18

Các nhà thiên văn học gói là một lựa chọn tốt. Nó hỗ trợ các đối tượng từ nhiều hàm và gói thường được sử dụng (lm, glm, svyreg, survival, pscl, AER), cũng như từ zelig. Ngoài các bảng hồi quy, nó cũng có thể xuất thống kê tóm tắt cho các khung dữ liệu hoặc trực tiếp xuất nội dung của các khung dữ liệu.


15

Tôi có một vài mẹo và giải quyết các 'tính năng' thú vị của xtable và latex mà tôi sẽ chia sẻ ở đây.

Thủ thuật # 1: Loại bỏ trùng lặp trong Cột và Thủ thuật # 2: Sử dụng Booktabs

Đầu tiên, tải các gói và xác định chức năng sạch của tôi

<<label=first, include=FALSE, echo=FALSE>>= 
    library(xtable)
    library(plyr)

    cleanf <- function(x){     
        oldx <- c(FALSE, x[-1]==x[-length(x)])  
        # is the value equal to the previous?    
        res <- x
        res[oldx] <- NA
        return(res)} 

Bây giờ tạo một số dữ liệu giả mạo

data<-data.frame(animal=sample(c("elephant", "dog", "cat", "fish", "snake"), 100,replace=TRUE),
            colour=sample(c("red", "blue", "green", "yellow"), 100,replace=TRUE),
            size=rnorm(100,mean=500, sd=150),
            age=rlnorm(100, meanlog=3, sdlog=0.5))

    #generate a table
    datatable<-ddply(data, .(animal, colour), function(df) {
                return(data.frame(size=mean(df$size), age=mean(df$age)))
            })

Bây giờ chúng ta có thể tạo một bảng và sử dụng hàm sạch để loại bỏ các mục trùng lặp trong các cột nhãn.

cleandata<-datatable
cleandata$animal<-cleanf(cleandata$animal)
cleandata$colour<-cleanf(cleandata$colour)
@ 

đây là một xtable bình thường

<<label=normal, results=tex, echo=FALSE>>=
print(
    xtable(
        datatable
        ),
        tabular.environment='longtable',
        latex.environments=c("center"), 
        floating=FALSE, 
        include.rownames=FALSE
    )
@ 

đây là một xtable bình thường trong đó một chức năng tùy chỉnh đã biến các bản sao thành NA

<<label=cleandata, results=tex, echo=FALSE>>=
print(
    xtable(
        cleandata
        ),
        tabular.environment='longtable',
        latex.environments=c("center"), 
        floating=FALSE, 
        include.rownames=FALSE
    )
@ 

Bảng này sử dụng gói booktab (và cần \ usepackage {booktabs} trong các tiêu đề)

\begin{table}[!h] 
        \centering
        \caption{table using booktabs.}
        \label{tab:mytable}
<<label=booktabs, echo=F,results=tex>>= 
            mat <- xtable(cleandata,digits=rep(2,ncol(cleandata)+1))
            foo<-0:(length(mat$animal))
            bar<-foo[!is.na(mat$animal)]
            print(mat, 
                  sanitize.text.function = function(x){x},
                  floating=FALSE,
                  include.rownames=FALSE,
                  hline.after=NULL, 
                  add.to.row=list(pos=list(-1,bar,nrow(mat)), 
                  command=c("\\toprule ", "\\midrule ", "\\bottomrule ")))
  #could extend this with \cmidrule to have a partial line over
  #a sub category column and \addlinespace to add space before a total row
@ 

12

Hai tiện ích trong gói taRifx có thể được sử dụng trong buổi hòa nhạc để tạo ra các bảng nhiều hàng của các thừa kế lồng nhau.

library(datasets)
library(taRifx)
library(xtable)

test.by <- bytable(ChickWeight$weight, list( ChickWeight$Chick, ChickWeight$Diet) )
colnames(test.by) <- c('Diet','Chick','Mean Weight')
print(latex.table.by(test.by), include.rownames = FALSE, include.colnames = TRUE, sanitize.text.function = force)
#   then add \usepackage{multirow} to the preamble of your LaTeX document
#   for longtable support, add ,tabular.environment='longtable' to the print command (plus add in ,floating=FALSE), then \usepackage{longtable} to the LaTeX preamble

đầu ra bảng mẫu


2
Có cách nào để làm một điều tương tự nhưng với toàn bộ khung dữ liệu thay vì chỉ một vectơ như đầu vào với bytable () không?
Thraupidae

5

... và Thủ thuật đa mục số 3 trong Xtable

Tạo thêm một số dữ liệu

moredata<-data.frame(Nominal=c(1:5), n=rep(5,5), 
        MeanLinBias=signif(rnorm(5, mean=0, sd=10), digits=4), 
        LinCI=paste("(",signif(rnorm(5,mean=-2, sd=5), digits=4),
                ", ", signif(rnorm(5, mean=2, sd=5), digits=4),")",sep=""),
        MeanQuadBias=signif(rnorm(5, mean=0, sd=10), digits=4), 
        QuadCI=paste("(",signif(rnorm(5,mean=-2, sd=5), digits=4),
                ", ", signif(rnorm(5, mean=2, sd=5), digits=4),")",sep=""))

names(moredata)<-c("Nominal", "n","Linear Model \nBias","Linear \nCI", "Quadratic Model \nBias", "Quadratic \nCI")

Bây giờ hãy tạo xtable của chúng tôi, sử dụng chức năng khử trùng để thay thế tên cột bằng các lệnh dòng mới latex chính xác (bao gồm cả dấu gạch chéo kép để R hài lòng)

<<label=multilinetable, results=tex, echo=FALSE>>=
foo<-xtable(moredata)
align(foo) <- c( rep('c',3),'p{1.8in}','p{2in}','p{1.8in}','p{2in}' )
print(foo, 
            floating=FALSE, 
            include.rownames=FALSE,
            sanitize.text.function = function(str) {
                str<-gsub("\n","\\\\", str, fixed=TRUE)

                return(str)
            }, 
            sanitize.colnames.function = function(str) {
                str<-c("Nominal", "n","\\centering Linear Model\\\\ \\% Bias","\\centering Linear \\\\ 95\\%CI", "\\centering Quadratic Model\\\\ \\%Bias", "\\centering Quadratic \\\\ 95\\%CI \\tabularnewline")
                return(str)
            })
@  

(mặc dù điều này không hoàn hảo, vì chúng tôi cần \ tabularnewline để bảng được định dạng chính xác và Xtable vẫn đặt cuối cùng \, vì vậy chúng tôi kết thúc bằng một dòng trống bên dưới tiêu đề bảng.)


5

Bạn cũng có thể sử dụng chức năng có thể lặp lại từ gói micsFuncs của gói R:

http://cran.r-project.org/web/packages/miscFuncs/index.html

latextable (M) trong đó M là một ma trận với các mục nhập chữ và số hỗn hợp xuất ra một bảng LaTeX cơ bản trên màn hình, có thể được sao chép và dán vào tài liệu LaTeX. Khi có các số nhỏ, nó cũng thay thế các số này bằng ký hiệu chỉ mục (ví dụ: 1,2x10 ^ {- 3}).


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.