ความสัมพันธ์ระหว่าง R Markdown, Knitr, Pandoc และ Bookdown


93

ความสัมพันธ์ระหว่างฟังก์ชันการทำงานของ R Markdown, Knitr, Pandoc และ Bookdown คืออะไร?

โดยเฉพาะอย่างยิ่งอะไรคือ 'การแบ่งงาน' ระหว่างแพ็คเกจเหล่านี้ในการแปลงเอกสารมาร์กอัปที่มีรหัส R ฝังตัว (เช่น.Rnwหรือ.Rmd) เป็นผลลัพธ์สุดท้าย (เช่น.pdfหรือ.html)? และหากใช้ Knitr ในการประมวลผล RMarkdown rmarkdownแพ็กเกจจะทำหน้าที่อะไรและแตกต่างกับแพคเกจอย่างไรmarkdown package?

คำตอบ:


141

Pandoc

Pandoc เป็นตัวแปลงเอกสาร มันสามารถแปลงจากหลายรูปแบบมาร์กอัปที่แตกต่างกันให้เป็นรูปแบบอื่น ๆ อีกมากมายเช่น.doc, .pdfฯลฯ

Pandoc เป็นเครื่องมือบรรทัดคำสั่งที่ไม่มี GUI มันเป็นซอฟต์แวร์อิสระแยกต่างหากจาก R อย่างไรก็ตามมันมาพร้อมกับ R Studio เนื่องจากrmarkdownอาศัยมันสำหรับการแปลงเอกสาร

Pandoc ไม่เพียง แต่แปลงเอกสารเท่านั้น แต่ยังเพิ่มฟังก์ชันที่อยู่ด้านบนของภาษามาร์กดาวน์พื้นฐานเพื่อให้สามารถรองรับเอาต์พุตที่ซับซ้อนมากขึ้น

R Markdown

R Markdown ขึ้นอยู่กับ markdown:

Markdown (ภาษามาร์กอัป)

Markdown เป็นภาษามาร์กอัปที่มีน้ำหนักเบาพร้อมไวยากรณ์การจัดรูปแบบข้อความธรรมดาที่ออกแบบมาเพื่อให้สามารถแปลงเป็น HTML และรูปแบบอื่น ๆ ได้ ไฟล์ markdown .mdเป็นไฟล์ข้อความธรรมดาที่จะได้รับโดยทั่วไปส่วนขยาย

เช่นเดียวกับภาษามาร์กอัปอื่น ๆ เช่น HTML และ Latex เป็นอิสระจาก R โดยสิ้นเชิง

ไม่มีมาตรฐาน Markdown ที่กำหนดไว้อย่างชัดเจน สิ่งนี้นำไปสู่การแยกส่วนเนื่องจากผู้ค้าต่าง ๆ เขียนภาษาที่แตกต่างกันไปเพื่อแก้ไขข้อบกพร่องหรือเพิ่มคุณสมบัติที่ขาดหายไป

Markdown (แพ็คเกจ R)

markdownเป็นแพ็คเกจ R ที่แปลง.Rmdไฟล์เป็น HTML เป็นรุ่นก่อนrmarkdownซึ่งมีฟังก์ชันอื่น ๆ อีกมากมาย ไม่แนะนำให้ใช้อีกต่อไป

R Markdown (ภาษามาร์กอัป)

R Markdown เป็นส่วนขยายของไวยากรณ์ markdown ไฟล์ R Markdown .Rmdเป็นไฟล์ข้อความธรรมดาที่มักจะมีนามสกุลไฟล์ พวกเขาเขียนโดยใช้ส่วนขยายของไวยากรณ์ markdown ที่ทำให้สามารถฝังรหัส R ไว้ในรูปแบบที่สามารถเรียกใช้งานได้ในภายหลัง

เนื่องจากคาดว่าจะถูกประมวลผลโดยrmarkdownแพ็กเกจจึงสามารถใช้ไวยากรณ์ Pandoc markdownเป็นส่วนหนึ่งของไฟล์ R markdown ได้ นี่คือส่วนขยายของไวยากรณ์มาร์กดาวน์ดั้งเดิมที่มีฟังก์ชันเพิ่มเติมเช่น HTML ดิบ / ลาเท็กซ์และตาราง

R Markdown (แพ็คเกจ)

แพ็กเกจ R rmarkdownเป็นไลบรารีที่ประมวลผลและแปลง.Rmdไฟล์เป็นรูปแบบต่างๆ

ฟังก์ชั่นหลักคือrmarkdown::renderซึ่งยืนอยู่บนไหล่ของ pandoc ฟังก์ชันนี้แสดงผลไฟล์อินพุตเป็นรูปแบบเอาต์พุตที่ระบุโดยใช้ pandoc หากอินพุตต้องการการถักknitr::knitจะถูกเรียกก่อนแพนดอค

จุดมุ่งหมายของแพ็คเกจ RMarkdown คือเพียงเพื่อให้ค่าเริ่มต้นที่ดีพอสมควรและอินเทอร์เฟซที่เป็นมิตรกับ R เพื่อปรับแต่งตัวเลือก Pandoc .

ข้อมูลเมตาของ YAML ที่เห็นที่ด้านบนของไฟล์ RMarkdown นั้นมีไว้เพื่อส่งผ่านตัวเลือกเพื่อrmarkdown::renderเป็นแนวทางในการสร้าง

โปรดทราบว่า RMarkdown เกี่ยวข้องกับไวยากรณ์ markdown เท่านั้น หากคุณต้องการแปลงไฟล์.Rhtmlหรือ.Rnwไฟล์คุณควรใช้ฟังก์ชันอำนวยความสะดวกที่มีอยู่ในตัวKnitrเช่นknitr::knit2htmlและknitr:knit2pdf

ผู้ถัก

Knitr ใช้เอกสารข้อความธรรมดาที่มีโค้ดฝังตัวดำเนินการรหัสและ 'knits' ผลลัพธ์กลับเข้าไปในเอกสาร

ตัวอย่างเช่นมันแปลง

  • R Markdown ( .Rmd)ไฟล์เป็นไฟล์ markdown มาตรฐาน ( .md)
  • .Rnw(Sweave)ไฟล์ลงไป.texในรูปแบบ
  • .Rhtmlไฟล์ลงเป็น HTML

ฟังก์ชันหลักคือknitr::knitและโดยค่าเริ่มต้นสิ่งนี้จะดูที่เอกสารอินพุตและลองเดาว่าเป็นประเภทใด - Rnw, Rmd เป็นต้น

ฟังก์ชันหลักนี้ทำหน้าที่สามบทบาท: - ตัวแยกวิเคราะห์แหล่งที่มาซึ่งจะตรวจสอบเอกสารอินพุตและตรวจจับว่าส่วนใดเป็นโค้ดที่ผู้ใช้ต้องการได้รับการประเมิน - ตัวประเมินรหัสซึ่งประเมินรหัสนี้ - ตัวแสดงผลเอาต์พุตซึ่งเขียนผลลัพธ์ของการประเมินกลับไปยังเอกสารในรูปแบบที่สามารถตีความได้โดยประเภทเอาต์พุตดิบ ตัวอย่างเช่นถ้าไฟล์อินพุตเป็น an .Rmdการแสดงผลเอาต์พุตจะทำเครื่องหมายผลลัพธ์ของการประเมินโค้ดใน.mdรูปแบบ

การแปลงระหว่างรูปแบบเอกสาร

Knitr ไม่แปลงระหว่างรูปแบบเอกสาร - เช่นการแปลงไฟล์เป็น.mdไฟล์.html. อย่างไรก็ตามมีฟังก์ชั่นอำนวยความสะดวกบางอย่างเพื่อช่วยให้คุณใช้ไลบรารีอื่นเพื่อทำสิ่งนี้ หากคุณกำลังใช้แพคเกจที่คุณควรละเว้นการทำงานนี้เพราะได้รับการแทนที่ด้วยเครื่องrmarkdownrmarkdown::render

ตัวอย่างคือknitr:knit2pdfสิ่งที่จะ: 'ถักเอกสาร Rnw หรือ Rrst และคอมไพล์เป็น PDF โดยใช้ texi2pdf หรือ rst2pdf'

แหล่งที่มีศักยภาพของความสับสนคือknitr::knit2htmlซึ่ง"เป็นฟังก์ชั่นอำนวยความสะดวกที่จะถักแหล่ง markdown เข้าและโทรmarkdown::markdownToHTMLในการแปลงผลเป็น HTML." ตอนนี้เป็นฟังก์ชันเดิมเนื่องจากmarkdownแพคเกจถูกแทนที่ด้วยrmarkdownแพคเกจ ดูบันทึกนี้

Bookdown

แพ็คเกจ bookdown สร้างขึ้นที่ด้านบนของ R Markdown และสืบทอดความเรียบง่ายของไวยากรณ์ Markdown ตลอดจนความเป็นไปได้ของรูปแบบเอาต์พุตหลายประเภท (PDF / HTML / Word / …)

มีคุณสมบัติเช่นเอาต์พุต HTML หลายหน้าการกำหนดหมายเลขและการอ้างอิงข้ามตัวเลข / ตาราง / ส่วน / สมการการแทรกส่วน / ภาคผนวกและนำเข้าสไตล์ GitBook ( https://www.gitbook.com ) เพื่อสร้าง HTML ที่สวยงามและน่าสนใจ หน้าหนังสือ


2
ฉันพบว่าสิ่งนี้สับสนมากดังนั้นฉันจึงพยายามอย่างเต็มที่ที่นี่ โปรดแก้ไขหรือเพิ่มคำตอบอื่นหากฉันมีบางอย่างผิดปกติ ...
RobinL

6
แง่มุมหนึ่งที่ฉันรู้สึกสับสนคือเอกสารของพารามิเตอร์ที่ส่งผ่านไปยังแต่ละขั้นตอนของ toolchain แทบจะไม่มีความช่วยเหลือแบบโต้ตอบ (เช่นการเติมข้อความอัตโนมัติ) และต้องเดาว่าควรเรียกพารามิเตอร์ใดในส่วนหัวของ yaml หรือผ่านknitr_opts(ฉันมักจะลืมว่ามันเรียกว่าอะไร) หรือผ่านทางอาร์กิวเมนต์ pandoc ที่กำหนดเองหรือผ่านไฟล์มันเทศเพิ่มเติมหรือกำหนดเอง เทมเพลต pandoc ... บางครั้งมันให้ความรู้สึกเหมือนป่าโดยเฉพาะอย่างยิ่งเมื่อคุณเพิ่ม LaTeX ลงในห่วงโซ่
baptiste

3
@baptiste ฉันเห็นด้วยอย่างยิ่ง และนี่คือเหตุผลว่าทำไมฉันถึงชอบเอกสาร RNW ที่มี LaTeX แบบเปลือย ไม่มีpandocขั้นกลางเวทน้อยสับสนน้อยลง เพียงเส้นโค้งการเรียนรู้ LaTeX ที่สูงชันเป็นที่ยอมรับ ในความคิดของฉัน Rmarkdown นั้นยอดเยี่ยมเมื่อคุณพอใจกับสิ่งเริ่มต้นง่ายๆ แต่ทันทีที่คุณต้องปรับแต่งความซับซ้อนก็เพิ่มขึ้นอย่างรวดเร็ว
CL.

3
นี่เป็นคำอธิบายที่ดีที่สุดที่ฉันพบทั้งหมดนี้ เป็นเรื่องที่สับสนมากสำหรับผู้เริ่มต้นหรือแม้แต่ผู้ที่มีประสบการณ์ใน R และลาเท็กซ์อย่างแยกกัน โพสต์ที่ยอดเยี่ยม
StatsStudent

2
@StatsStudent ฉันคิดว่าแผ่นโกง rstudio rmarkdown เวอร์ชันก่อนหน้ามีไดอะแกรมที่ค่อนข้างมีประโยชน์ในการทำความเข้าใจขั้นตอนต่างๆในการสร้างเอาต์พุตจาก rmarkdown บางทีคำตอบที่นี่สามารถทำได้ด้วยแผนภาพ?
Mark Neal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.