Saltar al contenido

¿Es posible crear un documento Rmarkdown de representación automática?

Esta es la contestación más exacta que encomtrarás dar, pero obsérvala detenidamente y valora si es compatible a tu trabajo.

Solución:

Puede tratar un archivo Rmd como un Rscript. Por ejemplo, suponga que su archivo Rmd se ve así

---
title: "Untitled"
author: "ekoam"
date: "`r Sys.Date()`"
output: html_document
---

```r setup, include=FALSE
knitr::opts_chunk$set(echo = TRUE)
```

## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see .

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

```r cars
summary(cars)
```

## Including Plots

You can also embed plots, for example:

```r pressure, echo=FALSE
plot(pressure)
```

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

A continuación, puede anteponer el siguiente código a ese archivo Rmd

#!/usr/bin/env Rscript

args <- commandArgs()
fname <- normalizePath(sub("--file=", "", args[grepl("--file=", args)]))
thisfile <- readLines(fname)
newfname <- paste0(tempdir(), "/", basename(fname))
writeLines(thisfile[-1:-which(thisfile == "q("no")")], newfname)
rmarkdown::render(newfname, output_dir = dirname(fname))
q("no")

El truco aquí es q("no"). Esta línea finaliza la sesión de R y, por lo tanto, todo lo que se escriba después será ignorado. Tal efecto también significa una gran flexibilidad para la codificación porque puede escribir casi cualquier código R válido antes de eso. q("no"). El código anterior simplemente crea otro archivo Rmd temporal con el mismo contenido que el siguiente q("no"). Entonces nosotros rmarkdown::render ese archivo temporal y volcar la salida al directorio actual.

El archivo Rmd completo se ve así

#!/usr/bin/env Rscript

args <- commandArgs()
fname <- normalizePath(sub("--file=", "", args[grepl("--file=", args)]))
thisfile <- readLines(fname)
newfname <- paste0(tempdir(), "/", basename(fname))
writeLines(thisfile[-1:-which(thisfile == "q("no")")], newfname)
rmarkdown::render(newfname, output_dir = dirname(fname))
q("no")

---
title: "Untitled"
author: "ekoam"
date: "`r Sys.Date()`"
output: html_document
---

```r setup, include=FALSE
knitr::opts_chunk$set(echo = TRUE)
```

## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see .

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

```r cars
summary(cars)
```

## Including Plots

You can also embed plots, for example:

```r pressure, echo=FALSE
plot(pressure)
```

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Descargo de responsabilidad: no sé mucho sobre Linux, ni tengo una máquina Linux con R instalado disponible para probar mi respuesta. Déjame saber si esto no funciona correctamente. Si esto inspira a alguien a escribir una mejor respuesta, felizmente eliminaré esta.


Permítanme abordar esto al revés:

  • Para tejer un documento, necesitamos llamar rmarkdown::render().
  • Para ejecutar este comando desde una línea de comando, podemos usar RScript -e "rmarkdown::render('document.Rmd')"ver por ejemplo aquí.
  • Probablemente no desee codificar la ruta a Rscript pero usa un shebang como #!/usr/bin/env Rscript en cambio.
  • El problema con este enfoque es que no permite pasar argumentos a Rscript.
  • Por lo tanto, propongo usar un "envoltorio" en el shebang que se encarga de llamar Rscript.
  • Con el nombre del archivo RMD como argumento, el código R requerido se convierte en rmarkdown::render(commandArgs(trailingOnly=TRUE)[1]).

Paso a paso:

  1. Cree el contenedor (en cualquier directorio que esté en su $PATH) y hacerlo ejecutable:

     touch KnitWrapper.sh
     chmod +x KnitWrapper.sh
    
  2. Escribe lo siguiente a KnitWrapper.sh:

     #!/usr/bin/env bash
     Rscript -e "rmarkdown::render(commandArgs(trailingOnly=TRUE)[1])" $1
    
  3. Asegurarse Rscript está en tu $PATH. Si actualiza R, actualice su $PATH respectivamente.

  4. En su archivo RMD, agregue el shebang #!/usr/bin/env KnitWrapper.sh.

  5. Haga que su archivo RMD sea ejecutable y ejecútelo:

     chmod +x yourDocument.Rmd
     ./yourDocument.Rmd
    

Desafortunadamente, lo anterior no se ha probado en gran medida. Avíseme si no funciona, para que pueda corregir o eliminar esta respuesta.

Puntuaciones y reseñas

Si tienes alguna desconfianza y capacidad de beneficiar nuestro división puedes dejar un informe y con gusto lo observaremos.

¡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 *