【问题标题】:Can't change params in Rmd documents无法更改 Rmd 文档中的参数
【发布时间】:2015-11-08 12:47:54
【问题描述】:

正如this site 中所解释的,可以在 Rmarkdown 文件的 YAML 标头中定义参数,并且在那里指定的默认值可以被 rmarkdown::render("foo.Rmd", params = list(param1 = "bar") 覆盖。但是,当我尝试此操作时,出现以下错误:

参数对象已存在于 knit 环境中,因此无法被渲染参数覆盖

这是一个最小的可重现 Rmd 文档。假设文件名为test.Rmd

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

Hello, my name is `r params$name`.

当我现在尝试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 

感谢您的帮助!

【问题讨论】:

  • 你的代码很适合我。

标签: r knitr r-markdown


【解决方案1】:

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

rmarkdown::render("test.Rmd", params = list(name = "Jordan"), envir = new.env() )

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

【讨论】:

    【解决方案2】:

    错误消息表明您在当前工作区中已经有一个名为 params 的对象,您应该在调用 rmarkdown::render() 之前将其删除 (rm(params))。使用ls() 仔细检查当前环境中的对象。

    【讨论】:

    • 谢谢!我将“编织环境”解释为“为编织创建的新会话”,而不是我调用渲染函数的环境。在交互式测试 Rmd 代码时有助于记住!
    猜你喜欢
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多