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:
-
Cree el contenedor (en cualquier directorio que esté en su
$PATH
) y hacerlo ejecutable:touch KnitWrapper.sh chmod +x KnitWrapper.sh
-
Escribe lo siguiente a
KnitWrapper.sh
:#!/usr/bin/env bash Rscript -e "rmarkdown::render(commandArgs(trailingOnly=TRUE)[1])" $1
-
Asegurarse
Rscript
está en tu$PATH
. Si actualiza R, actualice su$PATH
respectivamente. -
En su archivo RMD, agregue el shebang
#!/usr/bin/env KnitWrapper.sh
. -
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.