Saltar al contenido

¿Cómo combinar dos archivos RMarkdown (.Rmd) en una única salida?

Solución:

Actualización de agosto de 2018: Esta respuesta fue escrita antes del advenimiento de bookdown, que es un enfoque más poderoso para escribir libros basados ​​en Rmarkdown. Mira lo mínimo bookdown ejemplo en la respuesta de @ Mikey-Harper!

Cuando quiero dividir un informe grande en Rmd separados, normalmente creo un Rmd padre e incluyo los capítulos como hijos. 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.

report.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')

Que produce:
Mi reporte

Y si desea una forma rápida de crear los fragmentos para los documentos de su hijo:

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

Recomendaría que la gente use el bookdown paquete para crear informes a partir de varios archivos de 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 bookdown configuración. El detalle principal es que el archivo principal debe llamarse index.Rmd y debe incluir la 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 tejemos el index.Rmd bookdown fusionará todos los archivos en el mismo directorio en orden alfabético (este comportamiento se puede cambiar usando un extra _bookdown.yml expediente).

ingrese la descripción de la imagen aquí

Una vez que se sienta cómodo con esta configuración básica, es fácil personalizar el documento bookdown 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 general de bookdown
  • La creación de libros con bookdown proporciona una guía completa sobre bookdown y se recomienda para obtener detalles más avanzados.

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *