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.