无法更改Rmd文档中的参数

Tom*_*mmy 10 r knitr r-markdown

正如在此站点上所解释的那样,可以在Rmarkdown文件的YAML头中定义参数,并且可以覆盖其中指定的默认值rmarkdown::render("foo.Rmd", params = list(param1 = "bar").但是,当我尝试这个时,我收到以下错误:

params对象已存在于编织环境中,因此不能被渲染参数覆盖

这是一个可重复性最小的Rmd文档.假设文件名是test.Rmd.

---
title: "Test"
output: pdf_document
params:
  name: Andreas
---

Hello, my name is `r params$name`.
Run Code Online (Sandbox Code Playgroud)

当我现在尝试rmarkdown::render("test.Rmd", params = list(name = "Jordan")它停止与上面写的错误.

这是我的sessionInfo():

R version 3.2.1 (2015-06-18)
Platform: x86_64-apple-darwin14.4.0 (64-bit)
Running under: OS X 10.10.4 (Yosemite)

locale:
[1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] knitr_1.11      rmarkdown_0.7.3

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.0      XML_3.98-1.3     digest_0.6.8     MASS_7.3-40     grid_3.2.1      
 [6] plyr_1.8.3       gtable_0.1.2     magrittr_1.5     scales_0.2.5     ggplot2_1.0.1   
[11] stringi_0.5-5    reshape2_1.4.1   jwiDlst_0.1.1    proto_0.3-10     tools_3.2.1     
[16] stringr_1.0.0    munsell_0.4.2    yaml_2.1.13      parallel_3.2.1   colorspace_1.2-6
[21] htmltools_0.2.6 
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Yih*_*Xie 12

该错误消息表明您已经有一个params在当前工作空间中命名的对象,您应该rm(params)在调用之前删除它()rmarkdown::render().用于ls()仔细检查当前环境中的对象.


Don*_*onJ 10

或者 - 通过包含选项在新环境中编织文档envir = new.env():

rmarkdown::render("test.Rmd", params = list(name = "Jordan"), envir = new.env() )
Run Code Online (Sandbox Code Playgroud)

我喜欢在任何情况下都这样做以确保rmarkdown报告仅使用明确定义为其自己的代码的一部分的对象.