RMarkdown accessing parameter from bash chunk

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-07 04:58:46

问题


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


回答1:


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




回答2:


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])
}
```



回答3:


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
```


来源:https://stackoverflow.com/questions/43516681/rmarkdown-accessing-parameter-from-bash-chunk

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!