r - 如何在渲染时将 optparse 参数传递给 R-markdown 文件?

标签 r r-markdown rscript optparse

我有一个 Report.Rmd 文件,它会生成 pdf 文件。 在 .Rmd 文件中,我有一些带有 optparse 的代码,从 Rscript 接收要使用的参数:

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(optparse)
# get user as option 
option_list <- list(
  make_option(
  c("-u", "--u"), 
  type = "character", 
  default = "username"))
# parse accountId
parser <- OptionParser(
  usage = "%prog [options] file",
  option_list = option_list,
  add_help_option = F)
args <- parse_args(parser, positional_arguments = TRUE)
opt <- args$options
```

当我将此代码(减去 ``` 和 knitr )放入 file.R 并使用 Rscript 运行它时,如下所示:

Rscript file.R -u abcd

代码执行时为abcd作为变量 opt$u 的值.

问题是,我需要从命令行创建 pdf 使用 optparse 参数。我可以用以下方法生成 pdf:

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

效果很好,只是 opt$u 的值不正确。 。 那么,如何添加-u Rscript 的参数? 我尝试过类似 Rscript -e "-u abcd;rmarkdown::render('Report.Rmd') ,这给了我 ERROR: option '-e' requires a non-empty argumentRscript -e "-u abcd" -e "markdown::render('Rapportage.Rmd')"给了我同样的错误。如何解决这个问题...?

编辑:解决方法可能是调用 file.R,将用户名写入 .RData,然后在 .Rmd 中加载 .RData。但我希望有一种更简单、更干净的方法......

最佳答案

因此,正如 OP 和我共同发现的那样,可以使用 rmarkdown::render()params 参数在渲染过程中传递参数。 它需要一个命名参数列表。为了使其工作,您必须在 YAML header 中设置相同的参数。

示例:

这是我们的文档file.Rmd:

---
title: "MWE"
output: pdf_document
params:
  myName: ""
---

```{r color, results='markup'}
print(params$myName)
```

现在我们可以使用 myName 参数传递一个值

rmarkdown::render("file.Rmd", params = list(myName = "Martin"))

请注意,当您在控制台中渲染时,您必须在执行的 R 命令中转义引号:

Rscript -e "rmarkdown::render(\"file.Rmd\", params = list(myName = \"abcd\"))"

关于r - 如何在渲染时将 optparse 参数传递给 R-markdown 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47409051/

相关文章:

r - Rscript.exe 中包含 Unicode 字符的文件路径

r - 奇怪的错误合并数据帧

r - 是否可以在多面图上切换 y 轴中断和标签的一侧?

r - 按变量对行进行编号,但在满足条件时重新开始

jquery - 如何放大 Rmarkdown 演示文稿中的绘图

r - 如何使用另一个数据帧的信息更新数据帧列

r - 在 rmarkdown 文本中打印 `ggplot2` 形状

R read_yaml() 读取一个向量作为参数

r - 1 :nrow(newdata) : argument of length 0 while using SVM predict 中出现错误