R에서 라텍스 테이블을 만들기위한 도구 [닫기]


268

일반적인 요청에 따라 R에서 라텍스 테이블 생성에 대한 커뮤니티 위키가 있습니다.이 게시물에서는 가장 일반적으로 사용되는 패키지 및 블로그에 대해 간략하지 않은 오브젝트에서 라텍스 테이블을 생성하기위한 코드에 대한 개요를 제공합니다. 내가 놓친 부분을 자유롭게 추가하거나 R로 멋진 형식의 라텍스 테이블을 생성하는 방법에 대한 팁, 힌트 및 작은 요령을 알려주십시오.

패키지 :

  • xtable : 가장 간단한 객체의 표준 테이블 용. 예제가 담긴 멋진 갤러리는 여기 에서 찾을 수 있습니다 .
  • memisc : 측량 데이터 관리 도구로, (기본) 회귀 모델 추정치의 라텍스 테이블을위한 일부 도구가 포함되어 있습니다.
  • Hmisc 에는 latex()선택한 객체를 포함하는 tex 파일을 생성 하는 함수 가 포함되어 있습니다 . 매우 유연하며 longtable라텍스 테이블을 출력 할 수도 있습니다. 도움말 파일에 많은 정보가 있습니다?latex
  • miscFuncs 에는 알파벳과 숫자가 혼합 된 행렬 데이터를 LaTeX 테이블로 변환하여 콘솔에 인쇄하여 LaTeX 문서에 복사하여 붙여 넣을 수있는 깔끔한 기능인 'latextable'이 있습니다.
  • texreg 패키지 ( JSS paper )는 통계 모델 출력을 LaTeX 테이블로 변환합니다. 여러 모델을 병합합니다. 네트워크 모델 및 다단계 모델 (lme 및 lme4)을 포함하여 약 50 가지 모델 유형을 처리 할 수 ​​있습니다.
  • reporttools package ( JSS paper )는 연속 형, 범주 형 및 날짜 변수에 대한 설명 통계를위한 또 다른 옵션입니다.
  • 테이블 패키지는 기술 통계량을 위해 R에서 가장 일반적인 LaTeX 테이블 작성 패키지 일 것입니다.
  • stargazer 패키지는 훌륭한 비교 통계 모델 요약표를 만듭니다.

블로그 및 코드 스 니펫

관련 질문 :


4
Cross Validated (stats.SE)에서 다음 블로그 게시물은 독자들에게 흥미로울 것 입니다. 효과적인 테이블 만들기에 대한 참고 사항 .
— gung-복 직원 모니카

2
ztable을 사용할 수도 있습니다. LaTeX 및 HTML 형식의 얼룩말 줄무늬 테이블을 쉽게 만듭니다. 그것은 매우 유연하고 간단합니다 cran.r-project.org/web/packages/ztable/vignettes/ztable.html
— SKAN

R (또는 RStudio)의 많은 테이블에서 작업하고 TexStudio와 같은 외부 라텍스 프로그램에서 사용하여 훨씬 더 큰 프로젝트에 포함시키기 위해 제안 된 "프로 시저"는 무엇입니까?
— skan

1
@skan 라텍스 전용입니다. "자식"문서를 작성하는 경우 해당 문서를 라텍스 문서로 작성하거나 include또는을 사용하십시오 input. 당신은 사용할 수 있습니다 writeLines()에서 모두 작동하는 kable()과 xtable(). .tex 파일로 저장하면 문제가 해결됩니다.
— Joris Meys

1
OTOH, 여러 문서를 사용하고 하나의 문서로 결합하려는 경우 (문서가 명확하지 않은 경우) 문서를 작성하고 input한 문서를 다른 문서로 가져 오는 데 사용 합니다. 라텍스 매뉴얼은 문서의 내용을 그 곳에 입력하는 것과 동일하다는 것을 알려주므로 프리앰블에서 수행 한 전체 설정을 복사하여 붙여 넣을 필요가 없습니다.
— 조리스 메이스

답변:


22

"brew"패키지에 대한 언급을 추가하고 싶습니다. 플레이스 홀더가있는 LaTeX 인 BREW 템플릿 파일을 작성한 다음 "BREW"하여 LaTeX에 \ include 또는 \ input 할 .tex 파일을 작성할 수 있습니다. 다음과 같은 것 :

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

brew 구문은 루프를 처리 할 수 ​​있으므로 데이터 프레임의 각 행에 대해 테이블 ​​행을 만들 수 있습니다.


R.rsp 패키지와 rstring () 함수는 brew :: brew ()와 유사합니다. 그것이 더 나은지 확실하지 않지만 패키지에는 확실히 더 많은 것들이 있습니다. 두 경우 모두 재현성이 떨어지지 않고 tex 코드에서 더 많은 유연성을 제공하므로이 방법이 마음에 듭니다.
— Richard DiSalvo

21

이 질문을 작성해 주셔서 감사합니다. 바라건대 커뮤니티 위키로 만들어지기를 바랍니다.

라텍스의 북탭 패키지는 멋진 테이블을 만들어냅니다. 다음은 xtable을 사용하여 북탭을 사용하는 라텍스 테이블 을 만드는 방법에 대한 블로그 게시물입니다.

apsrtable멋진 회귀 테이블을 생성 하므로 패키지를 믹스에 추가합니다 .

또 다른 아이디어 :이 패키지 중 일부 (예 : memisc 및 apsrtable)를 사용하면 코드를 쉽게 확장하여 다른 회귀 객체에 대한 테이블을 생성 할 수 있습니다. 그러한 예 중 하나는 질문에 표시된 lme4 memisc 코드입니다. 그러한 코드 스 니펫을 수집하기 위해 github 저장소를 시작하는 것이 합리적이며 시간이 지남에 따라 memisc 패키지에 추가 할 수도 있습니다. 응시자?


18

몽 상가의 패키지는 또 다른 좋은 옵션입니다. zelig뿐만 아니라 일반적으로 사용되는 많은 기능과 패키지 (lm, glm, svyreg, survival, pscl, AER)의 객체를 지원합니다. 회귀 테이블 외에도 데이터 프레임에 대한 요약 통계를 출력하거나 데이터 프레임의 내용을 직접 출력 할 수 있습니다.


15

여기에 공유 할 xtable과 Latex의 흥미로운 '기능'에 대한 몇 가지 트릭과 해결 방법이 있습니다.

트릭 # 1 : 열 및 트릭 # 2에서 중복 제거 : 북탭 사용

먼저 패키지를로드하고 깨끗한 기능을 정의하십시오.

<<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)} 

이제 가짜 데이터를 생성하십시오.

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)))
            })

이제 테이블을 생성하고 clean 함수를 사용하여 레이블 열에서 중복 항목을 제거 할 수 있습니다.

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

이것은 정상적인 xtable입니다

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

이것은 커스텀 함수가 NA로 복제 된 일반적인 xtable입니다.

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

이 테이블은 북탭 패키지를 사용하며 헤더에 \ usepackage {booktabs}가 필요합니다.

\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

taRifx 패키지의 두 가지 유틸리티를 함께 사용하여 중첩 된 계층의 다중 행 테이블을 생성 할 수 있습니다.

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

샘플 테이블 출력


2
bytable ()으로 입력 된 것과 같이 하나의 벡터 대신 전체 데이터 프레임으로 비슷한 작업을 수행하는 방법이 있습니까?
— Thraupidae

5

... 및 Xtable의 Trick # 3 여러 줄 항목

더 많은 데이터 생성

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")

이제 sanitize 함수를 사용하여 열 이름을 올바른 Latex 개행 명령으로 대체하는 xtable을 생성하십시오 (이중 백 슬래시를 포함하므로 R은 행복합니다)

<<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)
            })
@  

(이것이 완벽하지는 않지만 \ tabularnewline이 필요하므로 테이블의 형식이 올바르게 지정되고 Xtable은 여전히 ​​최종 \를 넣으므로 테이블 헤더 아래에 빈 줄이 생깁니다.)


5

R 패키지 micsFuncs에서 라텍스 테이블 함수를 사용할 수도 있습니다.

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

latextable (M) 여기서 M은 알파벳과 숫자가 혼합 된 행렬로, 기본 LaTeX 테이블을 화면에 출력하여 LaTeX 문서에 복사하여 붙여 넣을 수 있습니다. 작은 숫자가있는 경우 인덱스 표기법 (예 : 1.2x10 ^ {-3})으로 대체합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.