渲染时如何将 optparse 参数传递给 R-markdown 文件?
How to pass an optparse argument to a R-markdown file while rendering?
我有一个 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
的值执行。
问题是,我需要从命令行 和 使用 optparse 参数创建一个 pdf。我可以用以下方法生成 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 argument
。 Rscript -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\"))"
我有一个 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
的值执行。
问题是,我需要从命令行 和 使用 optparse 参数创建一个 pdf。我可以用以下方法生成 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 argument
。 Rscript -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\"))"