【问题标题】:How to pass a parameter when rendering an R script with spin?渲染带有旋转的R脚本时如何传递参数?
【发布时间】:2020-06-30 16:17:11
【问题描述】:

我正在使用命令rmarkdown::render(input = "my_script.R") 从 .R 脚本创建 HTML 输出。它调用 knitr::spin() 并成功生成 HTML 输出。在那个 .R 文件中,有一个过滤变量 school_level,我想通过调用 render() 来控制它的值。

我知道对于 RMarkdown 文件,我会在 YAML 标头中指定一个参数。但是我如何为 .R 脚本做到这一点?我在 RMarkdown Cookbook 之类的指南中没有看到它。

假设我要在 .R 脚本中修改的行是:

good_data <- my_data %>%
  filter(level == school_lvl)

我在 .R 脚本中进行哪些更改以控制 school_lvl 的值从对 rmarkdown::render 的调用?将school_lvl 的值设为“小学”或“中学”。

【问题讨论】:

    标签: r r-markdown knitr-spin


    【解决方案1】:

    如果你想将rmarkdown::render()函数的params参数中的一些参数传递给knitr,这有点复杂,因为knitr::spin()函数会覆盖参数。您可以在 R 脚本中指定一个带注释的标头(如 documentation 所示),参数值为空,例如test.R:

    #' ---
    #' params:
    #'   wanted_cyl: null
    #' ---
    
    library(tidyverse)
    
    mtcars %>%
     filter(cyl == params$wanted_cyl)
    

    然后你可以调用:

    rmarkdown::render(input = "test.R", params = list("wanted_cyl" = 6))
    

    【讨论】:

    • 这是一个很棒的小例子,谢谢。它在这个测试示例中起作用,然后在我的 .R 脚本中不起作用,这足以让我隔离我的潜在问题:该脚本的前任作者以 rm(list = ls()) 开头,它正在擦除参数!
    猜你喜欢
    • 2021-06-08
    • 2023-03-23
    • 1970-01-01
    • 2018-03-27
    • 2013-07-10
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多