tutorial - ¿Cómo combinar dos archivos RMarkdown(.Rmd) en una sola salida?
r markdown tutorial pdf (3)
Actualización de agosto de 2018: esta respuesta se escribió antes del advenimiento de bookdown , que es un enfoque más poderoso para escribir libros basados en Rmarkdown. ¡Echa un vistazo al ejemplo de bookdown mínimo en la answer @Mikey-Harper!
Cuando quiero dividir un informe grande en Rmd separado, normalmente creo un Rmd principal e incluyo los capítulos como secundarios. Este enfoque es fácil de entender para los nuevos usuarios y, si incluye una tabla de contenido (toc), es fácil navegar entre los capítulos.
informe.Rmd
---
title: My Report
output:
pdf_document:
toc: yes
---
```{r child = ''chapter1.Rmd''}
```
```{r child = ''chapter2.Rmd''}
```
capítulo1. rmd
# Chapter 1
This is chapter 1.
```{r}
1
```
capítulo2.rmd
# Chapter 2
This is chapter 2.
```{r}
2
```
Construir
rmarkdown::render(''report.Rmd'')
Lo que produce:
Y si desea una forma rápida de crear los fragmentos para sus documentos secundarios:
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''}
# ```
Tengo dos archivos en la misma carpeta: chapter1.Rmd y chapter2.Rmd, con el siguiente contenido:
capítulo1. rmd
---
title: "Chapter 1"
output: pdf_document
---
## This is chapter 1. {#Chapter1}
Next up: [chapter 2](#Chapter2)
capítulo2.rmd
---
title: "Chapter 2"
output: pdf_document
---
## This is chapter 2. {#Chapter2}
Previously: [chapter 1](#Chapter1)
¿Cómo puedo tejer estos para que se combinen en una sola salida pdf?
Por supuesto, render(input = "chapter1.Rmd", output_format = "pdf_document")
funciona perfectamente pero render(input = "chapter1.Rmd", input = "chapter2.Rmd", output_format = "pdf_document")
no lo hace.
¿Por qué quiero hacer esto? Para dividir un documento gigante en archivos lógicos.
He usado el paquete bookdown para construir látex a partir de .Rmd, pero esto parece una exageración para esta tarea en particular. ¿Hay una solución simple utilizando la línea de comandos knitr / pandoc / linux? ¿Me estoy perdiendo? Gracias.
Esto funcionó para mí:
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)
}
Imagina que hay una solución mejor y sería bueno tener algo como esto en los paquetes rmarkdown o knitr.
Recomiendo que la gente use el paquete de bookdown para crear informes a partir de varios archivos R Markdown. Agrega muchas características útiles, como referencias cruzadas, que son muy útiles para documentos más largos.
Adaptando el ejemplo de @Eric , aquí hay un ejemplo mínimo de la configuración de bookdown . El detalle principal es que el archivo principal debe llamarse index.Rmd
y debe incluir el site: bookdown::bookdown_site
línea YAML adicional site: bookdown::bookdown_site
:
index.Rmd
---
title: "A Minimal bookdown document"
site: bookdown::bookdown_site
output:
bookdown::pdf_document2:
toc: yes
---
01-intro.Rmd :
# Chapter 1
This is chapter 1.
```{r}
1
```
02-intro.Rmd :
# Chapter 2
This is chapter 2.
```{r}
2
```
Si index.Rmd
el index.Rmd
bookdown fusionará todos los archivos en el mismo directorio en orden alfabético (este comportamiento puede cambiarse utilizando un archivo adicional _bookdown.yml
).
Una vez que se sienta cómodo con esta configuración básica, es fácil personalizar el documento de reserva y los formatos de salida utilizando archivos de configuración adicionales, es decir, _bookdown.yml
y _output.yml
Otras lecturas
- R Markdown: la guía definitiva : el Capítulo 11 proporciona una gran descripción de bookdown
- La creación de libros con bookdown proporciona una guía completa sobre bookdown y se recomienda para detalles más avanzados.