18

I'm trying to run a Rmarkdown file (myfile.Rmd) from the command line terminal. This file needs to take an argument to work. We can use this simple file as an example:

---
title: "Simple example"
output:
  pdf_document: default
---

```{r read_arg, include=FALSE}
args = commandArgs(TRUE)
VAR = args[1]
```

```{r show_var}
VAR
```

So, first of all, is it possible to run a Rmarkdown file by reading arguments as done for Rscripts? I mean, not by reading input files as described in this question.

If so, how can it be done? I hope that the piece of work here used to run a Rmarkdown file worked for me, but it doesn't because of the argument. I'm trying to run something like:

Rscript -e "rmarkdown::render('myfile.Rmd myarg')"

EDIT: But it gives the following error:

Error in tools::file_path_as_absolute(input) : file 'myfile.Rmd_myarg' does not exist Calls: -> setwd -> dirname -> Además: Warning messages: 1: In normalizePath(path, winslash = winslash, mustWork = mustWork) : path[1]="myfile.Rmd myarg": No existe el fichero o el directorio 2: In normalizePath(path, winslash = winslash, mustWork = mustWork) : path[1]="myfile.Rmd_myarg": No existe el fichero o el directorio Ejecución interrumpida

Any ideas? Thank you!

elcortegano
  • 2,009
  • 10
  • 36
  • 50
  • 1
    You pass parameters to `render` using the `params` argument. Also, put a comma between the file name and any arguments. – Ryan Morton Apr 18 '18 at 16:46
  • It seems I can run `Rscript -e "rmarkdown::render('example.Rmd',params=list('myarg'))" `. The PDF file is now generated. I'm just wondering why it prints "NA" instead of "myarg", as expected – elcortegano Apr 18 '18 at 16:56
  • Add `myarg` to the parameters of the `RMD` file so it knows to accept them. – Ryan Morton Apr 18 '18 at 17:05
  • 1
    Also, please read the documentation on how to properly pass parameters to a report: https://rmarkdown.rstudio.com/developer_parameterized_reports.html – Ryan Morton Apr 18 '18 at 17:11
  • Thank you very much, now it works. Please, feel free to write it into an answer. I will accept it – elcortegano Apr 18 '18 at 19:52

1 Answers1

21

Adding the myarg object as a parameter is the way to go:

Rscript -e "rmarkdown::render('example.Rmd',params=list(args = myarg))"

And then add the parameter to your Rmd file:

---
title: "Simple example"
output:
  pdf_document: default
params:
  args: myarg
---

Documentation on parameterized reports here: https://rmarkdown.rstudio.com/developer_parameterized_reports.html

Ryan Morton
  • 2,257
  • 1
  • 15
  • 18
  • Small error in the call to Rscript. Should be args for it to work your suggested Rmd code. – JamesR Sep 16 '19 at 14:29
  • You're also missing a quotation mark at the end of the `Rscript` command, I can't edit it because it's less than a 6 character edit – Ben Jeffrey Mar 18 '20 at 09:51