7

I created an RMarkdown file file.Rmd with parameters.

I know how to access parameters within a r chunk but not from a bash chunk

If there is absolutely no way to do so, I will write the parameters in a file through r chunk and then read it from bash chunk...

---
output: html_document
params:
  myParam1:
    label: "Choose 1st parameter"
    value: 20
    input: slider
    min: 0
    max: 100
  myParam2:
    label: "Choose 2nd parameter"
    value: "Hello"
    input: text
---

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

```{r, echo=FALSE}
print(paste("1st parameter :",params$myParam1))
print(paste("2nd parameter :",params$myParam2))
```

```{bash}
# Don't know how to get parameters here
echo $params
```

Thanks

qfazille
  • 1,643
  • 13
  • 27

3 Answers3

6

I've seen a few options

  1. Use Sys.setenv to export variables from R to bash, so add this line to an R chunk.

    Sys.setenv(params = params$myParam1)

  2. Use the runr package

Chris S.
  • 2,185
  • 1
  • 14
  • 14
5

To apply the export-to-envirnoment idea from the accepted answer to all params, just add the following do.call loop to an R chunk before the bash chunk:

```{r, echo=FALSE, message=FALSE}
for (key in names(params)) {
  do.call('Sys.setenv', params[key])
}
```
teichert
  • 3,963
  • 1
  • 31
  • 37
2

Thanks Chris S, this works fine. I share the workaround I used (create tmp file) in case someone would be interested :

---
output: html_document
params:
  myParam1:
    label: "Choose 1st parameter"
    value: 20
    input: slider
    min: 0
    max: 100
  myParam2:
    label: "Choose 2nd parameter"
    value: "Hello"
    input: text
---

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

Chris solution :

```{r, echo=FALSE}
Sys.setenv(param1=params$myParam1)
Sys.setenv(param2=params$myParam2)
```
```{bash, echo=FALSE}
echo $param1
echo $param2
```

My workaround :

```{r}
param1 <- paste0("param1=\"",params$myParam1,"\"")
param2 <- paste0("param2=\"",params$myParam2,"\"")

# Write parameters in temporary file
fileConn <- file("~/params.tmp")
writeLines(c(param1,param2), fileConn)
close(fileConn)
```

```{bash, echo=FALSE}
. ~/params.tmp
rm ~/params.tmp
echo $param1
echo $param2
```
qfazille
  • 1,643
  • 13
  • 27