RMarkdown从bash块访问参数

时间:2017-04-20 10:17:58

标签: r bash r-markdown

我使用参数创建了一个RMarkdown文件>>> [(key, val, dct1.get(key)) for key, val in dct2.items()] [('NL', 2, 7), ('PG', 6, None), ('MC', 10, 9)]

我知道如何访问file.Rmd但不是r chunk

中的参数

如果绝对没有办法,我会通过bash chunk将参数写入文件中,然后从r chunk中读取...

bash chunk

由于

3 个答案:

答案 0 :(得分:3)

我见过几个选项

  1. 使用Sys.setenvR to bash导出变量,因此请将此行添加到R块。

    Sys.setenv(params = params$myParam1)

  2. 使用runr package

答案 1 :(得分:1)

要将导出到环境的想法从the accepted answer应用到所有参数,只需在bash块之前将以下do.call循环添加到R块:

```{r, echo=FALSE, message=FALSE}
for (key in names(params)) {
  do.call('Sys.setenv', params[key])
}
```

答案 2 :(得分:0)

谢谢Chris S,这很好用。 我分享了我使用的解决方法(创建tmp文件)以防有人感兴趣:

---
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解决方案:

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

我的解决方法:

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