एक ही आउटपुट में दो RMarkdown (.Rmd) फ़ाइलों को कैसे संयोजित करें?


100

मेरे पास एक ही फ़ोल्डर में दो फाइलें हैं: Chapter1.Rmd और Chapter2.Rmd, निम्न सामग्री के साथ:

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")नहीं करता है।

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

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


1
क्यों न केवल मूल रूप से LaTeX में लिखें? लगता है कि आपके लिए इसके लिए आवश्यक सभी उपकरण LaTeX में निर्मित हैं और बुनाई प्रक्रिया आपके दस्तावेज़ को TeX इंजन के माध्यम से वैसे भी चलाती है।
थॉमस

13
हाँ, मुझे लेटेक्स पसंद है और इसमें कोड एम्बेड करने की आवश्यकता है ताकि बी एक अच्छी योजना हो। रीड / राइटलाइन फ़ंक्शन एटीएम के साथ एक आर समाधान पर काम करना क्योंकि मेरा मानना ​​है कि मार्कडाउन उपयोगकर्ता के अनुकूल भविष्य है! arxiv.org/abs/1402.1894 Ie यह एक दार्शनिक निर्णय है: वह परिवर्तन करें जो आप दुनिया में देखना चाहते हैं।
रोबिनवेलवेलस

2
साथ ही, मार्कडाउन के रूप में लिखने से योगदान में प्रवेश की बाधा कम हो जाती है। आखिरकार यह LaTeX होगा, लेकिन फिलहाल मार्कडाउन पर्याप्त है।
रोबिनवेल्वेस

4
हैडली का बुकडाउन अब @yihui द्वारा विकसित किया जा रहा है और इसमें बहुत अधिक काम और उपयोगी दस्तावेज हैं: rstudio.github.io/bookdown
बेन

जवाबों:


138

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

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

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'}
# ```

यह काम करता है, फिर भी मेरे पास 10 अध्याय हैं। जब मैं फाइलों को रेंडर करता हूं, तो यह 5 वीं फाइल तक जाती है। मैं पीडीएफ नेविगेशन पैनल से सभी शीर्षक देख सकता हूं लेकिन पृष्ठ नहीं दिखाए गए हैं।
सूत अतन पीएचडी

26

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

@ एरिक से उदाहरण को अपनाना , यहाँ बुकडाउन सेटअप का एक न्यूनतम उदाहरण है । मुख्य विवरण यह है कि मुख्य फ़ाइल को बुलाया index.Rmdजाना है, और इसमें अतिरिक्त YAML लाइन शामिल होनी चाहिए 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 देंगी (यह एक अतिरिक्त _bookdown.ymlफ़ाइल का उपयोग करके व्यवहार को बदला जा सकता है )।

यहां छवि विवरण दर्ज करें

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

आगे की पढाई


क्या इस तरह से नेस्टेड आरएमडी फाइलों को प्रस्तुत करना संभव है? कैसे? मैं एक अध्याय में प्रत्येक तत्व के लिए एकल आरएमडी रखना चाहूंगा ।
जंगोरकी

बुकडाउन आमतौर पर प्रत्येक फ़ाइल में एक अध्याय होता है। हालाँकि, यदि संभव हो तो अलग-अलग फ़ाइलों में विभाजित करना संभव है। सबसे आसान तरीका यह होगा कि प्रत्येक फाइल को न्यूमेरिक इंडेक्स जैसे 1-1, 1-2, 1-3 इत्यादि के साथ प्रदान किया जाए
माइकल हार्पर

मैं अंत में परिशिष्ट जोड़ने की कोशिश कर रहा था जो दोनों दस्तावेज़ के लिए कोड दिखाता है। मैं कैसे प्राप्त कर सकता हूं?
नवीन गेब्रियल 20

यह एक अलग तरह का सवाल लगता है। आप एक और प्रश्न खोल सकते हैं और एक पूर्ण उदाहरण प्रदान कर सकते हैं जिसका मैं उत्तर देने की पूरी कोशिश करूंगा :)
माइकल हार्पर

स्पष्टीकरण: बुनना केवल वर्तमान दस्तावेज़ का पूर्वावलोकन करता है, जबकि "बिल्ड बुक" यह सब बनाता है।
रासमस लार्सन

4

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

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

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


9
मुझे लगता है कि यह एक उचित समाधान है, सिवाय इसके कि आप कुछ कोष्ठकों (और इंडेंटेशन !!) को भूल गए!
Yihui Xie
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.