दो RMarkdown(.Rmd) फ़ाइलों को एक आउटपुट में कैसे गठबंधन करें?




knitr pandoc (3)

मेरे पास एक ही फ़ोल्डर में दो फाइलें हैं: अध्याय 1.आरएमडी और अध्याय 2। आरएमडी, निम्नलिखित सामग्री के साथ:

chapter1.Rmd

---
title: "Chapter 1"
output: pdf_document
---

## This is chapter 1. {#Chapter1}

Next up: [chapter 2](#Chapter2)

chapter2.Rmd

---
title: "Chapter 2"
output: pdf_document
---

## This is chapter 2. {#Chapter2}

Previously: [chapter 1](#Chapter1)

मैं इन्हें कैसे बुना सकता हूं ताकि वे एक पीडीएफ आउटपुट में गठबंधन कर सकें?

बेशक, render(input = "chapter1.Rmd", output_format = "pdf_document") पूरी तरह से काम करता है लेकिन render(input = "chapter1.Rmd", input = "chapter2.Rmd", output_format = "pdf_document") नहीं है।

मैं ऐसा क्यों करना चाहता हूं? लॉजिकल फाइलों में एक विशाल दस्तावेज़ को तोड़ने के लिए।

मैंने रैमड से लेटेक्स बनाने के लिए bookdown पैकेज का उपयोग किया है लेकिन यह इस विशेष कार्य के लिए ओवरकिल जैसा लगता है। क्या मुझे याद आ रही है knitr / pandoc / linux कमांड लाइन का उपयोग कर एक सरल समाधान है? धन्यवाद।


यह मेरे लिए काम किया:

Rmd_bind <- 
    function(dir = ".",
    book_header = readLines(textConnection("---\ntitle: 'Title'\n---")))
{
    old <- setwd(dir)
    if(length(grep("book.Rmd", list.files())) > 0){
    warning("book.Rmd already exists")
    }
    write(book_header, file = "book.Rmd", )
    cfiles <- list.files(pattern = "*.Rmd", )
    ttext <- NULL
    for(i in 1:length(cfiles)){
    text <- readLines(cfiles[i])
    hspan <- grep("---", text)
    text <- text[-c(hspan[1]:hspan[2])]
    write(text, sep = "\n", file = "book.Rmd", append = T)
    }
    render("book.Rmd", output_format = "pdf_document")
    setwd(old)
    }

कल्पना कीजिए कि एक बेहतर समाधान है और इस तरह कुछ ऐसा करने के लिए रमार्कडाउन या बुनाई पैकेज में अच्छा लगेगा।


मैं अनुशंसा करता हूं कि एकाधिक आर मार्कडाउन फ़ाइलों से रिपोर्ट बनाने के लिए लोग बुकडाउन पैकेज का उपयोग करें। इसमें क्रॉस-रेफरेंसिंग जैसी कई उपयोगी सुविधाएं शामिल हैं जो लंबे दस्तावेज़ों के लिए बहुत उपयोगी हैं।

@Eric से उदाहरण का अनुकूलन , यहां बुकडाउन सेटअप का एक न्यूनतम उदाहरण है। मुख्य विवरण यह है कि मुख्य फ़ाइल को index.Rmd कहा जाना चाहिए। index.Rmd , और इसमें अतिरिक्त site: bookdown::bookdown_site लाइन site: bookdown::bookdown_site शामिल होनी चाहिए site: bookdown::bookdown_site :

index.Rmd

---
title: "A Minimal bookdown document"
site: bookdown::bookdown_site
output:
  bookdown::pdf_document2:
    toc: yes
---

01-परिचय। आरएमडी :

# Chapter 1

This is chapter 1.

```{r}
1
```

02-परिचय। आरएमडी :

# Chapter 2

This is chapter 2.

```{r}
2
```

अगर हम index.Rmd बुनाते हैंindex.Rmd बुकडाउन एक ही निर्देशिका में सभी फाइलों को वर्णानुक्रम में मर्ज करेगा (यह व्यवहार अतिरिक्त _bookdown.yml फ़ाइल का उपयोग करके बदला जा सकता है)।

एक बार जब आप इस मूल सेटअप के साथ सहज महसूस कर लेंगे, तो अतिरिक्त कॉन्फ़िगरेशन फ़ाइलों यानी _bookdown.yml और _output.yml का उपयोग करके बुकडाउन दस्तावेज़ और आउटपुट स्वरूपों को कस्टमाइज़ करना आसान है।

आगे की पढाई


अगस्त, 2018 अपडेट: यह उत्तर बुकडाउन के आगमन से पहले लिखा गया था, जो रमार्कडाउन आधारित पुस्तकों को लिखने के लिए एक और शक्तिशाली दृष्टिकोण है। @ माइकी-हार्पर के answer में न्यूनतम बुकडाउन उदाहरण देखें!

जब मैं एक अलग रिपोर्ट को अलग आरएमडी में तोड़ना चाहता हूं, तो मैं आम तौर पर एक माता-पिता आरएमडी बनाता हूं और अध्यायों को बच्चों के रूप में शामिल करता हूं। यह दृष्टिकोण नए उपयोगकर्ताओं को समझने में आसान है, और यदि आप सामग्री की एक तालिका (टीओसी) शामिल करते हैं, तो अध्यायों के बीच नेविगेट करना आसान है।

report.Rmd

---  
title: My Report  
output: 
  pdf_document:
    toc: yes 
---

```{r child = 'chapter1.Rmd'}
```

```{r child = 'chapter2.Rmd'}
```

chapter1.Rmd

# Chapter 1

This is chapter 1.

```{r}
1
```

chapter2.Rmd

# Chapter 2

This is chapter 2.

```{r}
2
```

निर्माण

rmarkdown::render('report.Rmd')

जो उत्पादन करता है:

और यदि आप अपने बच्चे के दस्तावेज़ों के लिए भाग बनाने का एक त्वरित तरीका चाहते हैं:

rmd <- list.files(pattern = '*.Rmd', recursive = T)
chunks <- paste0("```{r child = '", rmd, "'}\n```\n")
cat(chunks, sep = '\n')
# ```{r child = 'chapter1.Rmd'}
# ```
#
# ```{r child = 'chapter2.Rmd'}
# ```