【问题标题】:RMarkdown accessing parameter from bash chunkRMarkdown 从 bash 块访问参数
【发布时间】:2017-04-20 10:17:57
【问题描述】:

我创建了一个带有参数的 RMarkdown 文件file.Rmd

我知道如何访问 r chunk 中的参数,但不知道如何从 bash chunk 访问参数

如果绝对没有办法,我会通过r chunk将参数写入一个文件,然后从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
```

谢谢

【问题讨论】:

    标签: r bash r-markdown


    【解决方案1】:

    我已经看到了一些选项

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

      Sys.setenv(params = params$myParam1)

    2. 使用runr package

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • do.call(Sys.setenv, params) 将一次性导出所有文件。
      【解决方案3】:

      感谢 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)
      ```
      

      克里斯解决方案:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多