เครื่องมือสำหรับสร้างตารางลาเท็กซ์ใน R [ปิด]


268

ตามคำขอทั่วไปวิกิชุมชนในการผลิตตารางลาเท็กซ์ในอาร์ในโพสต์นี้ฉันจะให้ภาพรวมของแพ็คเกจและบล็อกที่ใช้บ่อยที่สุดพร้อมรหัสในการสร้างตารางลาเท็กซ์จากวัตถุที่ตรงไปตรงมาน้อยกว่า โปรดเพิ่มสิ่งที่ฉันพลาดไปและ / หรือให้คำแนะนำคำแนะนำและกลเม็ดเล็ก ๆ น้อย ๆ เกี่ยวกับวิธีสร้างตารางยางที่มีรูปแบบสวยงามด้วย R

แพ็คเกจ:

  • xtable : สำหรับตารางมาตรฐานของวัตถุที่ง่ายที่สุด แกลเลอรี่ที่ดีกับตัวอย่างที่สามารถพบได้ที่นี่
  • memisc : เครื่องมือสำหรับการจัดการข้อมูลการสำรวจมีเครื่องมือบางอย่างสำหรับตารางยางของแบบจำลองการถดถอยพื้นฐาน (ขั้นพื้นฐาน)
  • Hmiscมีฟังก์ชั่นlatex()ที่สร้างไฟล์เท็กซัสที่มีวัตถุที่เลือก มันค่อนข้างยืดหยุ่นและยังสามารถส่งออกlongtableตารางยาง มีข้อมูลมากมายในไฟล์ช่วยเหลือ?latex
  • miscFuncsมีฟังก์ชั่นอย่างเรียบร้อย 'latextable' ที่แปลงข้อมูลเมทริกซ์ด้วยรายการตัวอักษรและตัวเลขผสมลงในตาราง LaTeX และพิมพ์ไปยังคอนโซลดังนั้นพวกเขาสามารถคัดลอกและวางลงในเอกสาร LaTeX
  • แพคเกจtexreg ( กระดาษ JSS ) แปลงเอาท์พุทแบบจำลองทางสถิติเป็นตาราง LaTeX ผสานหลายรุ่น สามารถรับมือกับโมเดลประมาณ 50 แบบรวมถึงโมเดลเครือข่ายและโมเดลหลายระดับ (lme และ lme4)
  • แพ็คเกจreporttools ( กระดาษ JSS ) เป็นอีกตัวเลือกหนึ่งสำหรับสถิติเชิงพรรณนาในตัวแปรแบบต่อเนื่องหมวดหมู่และวันที่
  • แพคเกจตารางอาจเป็นแพคเกจตาราง LaTeX ที่ใช้กันทั่วไปมากที่สุดใน R สำหรับสถิติเชิงพรรณนา
  • แพคเกจstargazerทำให้ตารางสรุปแบบจำลองทางสถิติที่ดี

บล็อกและตัวอย่างข้อมูล

คำถามที่เกี่ยวข้อง:


4
บนไม้กางเขนในการตรวจสอบ (stats.SE) โพสต์บล็อกต่อไปนี้จะเป็นที่สนใจของผู้อ่านที่นี่: บันทึกบางอย่างเกี่ยวกับการทำตารางที่มีประสิทธิภาพ
gung - Reinstate Monica

2
คุณยังสามารถใช้ ztable มันทำให้ตารางลายม้าลายในรูปแบบ LaTeX และ HTML ได้อย่างง่ายดาย มันค่อนข้างจะมีความยืดหยุ่นและง่าย: cran.r-project.org/web/packages/ztable/vignettes/ztable.html
Skan

"ขั้นตอน" ที่แนะนำในการทำงานกับตารางจำนวนมากใน R (หรือ RStudio) คืออะไรและใช้พวกเขาจากโปรแกรม Latex ภายนอกเช่น TexStudio เพื่อฝังไว้ในโครงการขนาดใหญ่กว่ามาก?
skan

1
@skan นั่นเป็นน้ำยางข้นโดยเฉพาะ ถ้าคุณสร้าง "เด็ก" เอกสารที่คุณสร้างพวกเขาเป็นเอกสารน้ำยางข้นและใช้อย่างใดอย่างหนึ่งหรือinclude inputคุณสามารถใช้writeLines()ที่ทำงานร่วมกับทั้งสองและkable() xtable()เก็บเป็นไฟล์. tex และแก้ไขปัญหา
Joris Meys

1
OTOH ถ้าคุณใช้เอกสารหลายฉบับและต้องการรวมเข้าเป็นหนึ่งเดียว (คุณยังไม่ชัดเจนในเอกสารนั้น) คุณจะสร้างเอกสารและใช้inputเพื่อนำเอกสารหนึ่งไปเป็นเอกสารอื่น คู่มือยางพาราจะบอกคุณว่านี่เป็นเช่นเดียวกับการพิมพ์เนื้อหาของเอกสารในสถานที่นั้นจึงไม่จำเป็นต้องคัดลอกวางการตั้งค่าทั้งหมดที่คุณทำไว้ในบทนำ
Joris Meys

คำตอบ:


22

ฉันต้องการเพิ่มการกล่าวถึงแพ็คเกจ "ชง" คุณสามารถเขียนไฟล์เทมเพลตการชงซึ่งจะเป็น LaTeX พร้อมตัวยึดและจากนั้น "ชง" มันขึ้นเพื่อสร้างไฟล์. tex ไปที่ \ include หรือ \ input ลงใน LaTeX ของคุณ สิ่งที่ต้องการ:

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

ไวยากรณ์การชงสามารถจัดการลูปได้ดังนั้นคุณสามารถสร้างแถวของตารางสำหรับแต่ละแถวของดาต้าเฟรม


แพ็กเกจ R.rsp และฟังก์ชั่น rstring () คล้ายกับ brew :: brew () ไม่แน่ใจว่ามันดีกว่าหรือเปล่า แต่แพ็คเกจมีสิ่งต่าง ๆ อีกมากมายแน่นอน ไม่ว่าในกรณีใดฉันชอบวิธีการนี้เนื่องจากให้ความยืดหยุ่นมากกว่าในรหัสเท็กซัสในขณะที่ไม่เสียสละการทำซ้ำ
Richard DiSalvo

21

ขอบคุณ Joris ที่สร้างคำถามนี้ หวังว่ามันจะกลายเป็นวิกิชุมชน

แพ็คเกจ booktabs ในลาเท็กซ์สร้างตารางที่ดูดี นี่คือโพสต์บล็อกเกี่ยวกับวิธีการใช้ xtable เพื่อสร้างตารางลาเท็กซ์ที่ใช้ booktabs

ฉันจะเพิ่มapsrtableแพ็คเกจลงในรายการผสมเนื่องจากสร้างตารางการถดถอยที่ดูดี

แนวคิดอื่น: แพคเกจเหล่านี้บางส่วน (esp. memisc และ apsrtable) อนุญาตให้ส่วนขยายของโค้ดสร้างตารางสำหรับวัตถุการถดถอยที่แตกต่างกันได้ง่าย ตัวอย่างหนึ่งคือรหัส lme4 memisc ที่แสดงในคำถาม มันอาจจะเหมาะสมที่จะเริ่มต้นที่เก็บ github เพื่อรวบรวมตัวอย่างโค้ดและเมื่อเวลาผ่านไปอาจเพิ่มไปยังแพ็คเกจ memisc ผู้รับใด ๆ


18

Stargazerแพคเกจเป็นอีกหนึ่งตัวเลือกที่ดี รองรับวัตถุจากฟังก์ชั่นและแพ็คเกจที่ใช้กันทั่วไป (lm, glm, svyreg, Survival, pscl, AER) และจาก zelig นอกเหนือจากตารางการถดถอยมันยังสามารถส่งออกสถิติสรุปสำหรับเฟรมข้อมูลหรือส่งออกเนื้อหาของเฟรมข้อมูลโดยตรง


15

ฉันมีกลเม็ดเล็ก ๆ น้อย ๆ และพยายามหา 'คุณสมบัติ' ที่น่าสนใจของ xtable และลาเท็กซ์ที่ฉันจะแบ่งปันที่นี่

Trick # 1: การลบรายการที่ซ้ำกันในคอลัมน์และ Trick # 2: การใช้ Booktabs

ก่อนอื่นให้โหลดแพ็คเกจและกำหนดฟังก์ชั่นคลีนของฉัน

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

ตอนนี้เราสามารถสร้างตารางและใช้ฟังก์ชั่นใหม่ทั้งหมดเพื่อลบรายการที่ซ้ำกันในคอลัมน์ฉลาก

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

นี่คือ xtable ปกติที่ฟังก์ชันที่กำหนดเองเปลี่ยนเป็นซ้ำเป็น NA

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

ตารางนี้ใช้แพ็คเกจ booktab (และต้องการ \ 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

... และ Trick # 3 Multiline รายการใน Xtable

สร้างข้อมูลเพิ่มเติม

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

ตอนนี้ผลิต xtable ของเราโดยใช้ฟังก์ชัน sanitize เพื่อแทนที่ชื่อคอลัมน์ด้วยคำสั่ง newline Latex ที่ถูกต้อง (รวมถึง backslashes สองครั้งดังนั้น 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

นอกจากนี้คุณยังสามารถใช้ฟังก์ชั่น latextable จาก 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.