使用rmarkdown::render设置文档标题、作者和日期。

8
我正在使用 rmarkdown::render("script.r") 来创建 R 脚本的 HTML 版本。输出以 script.r 为标题,作者为我的登录名,并将当前日期作为日期。我不想透露我的登录名,也不想透露我的工作时间表。
我知道可以在 Rmd 文件中的 YAML 块中设置元数据(标题、作者、日期),但我想避免创建/编辑此文件,并仅使用原始的 R 脚本。
是否可以通过 rmarkdown::render 或其他函数如 knitr::opts_chunk$set 设置(标题、作者、日期)元数据?
或者,这些元数据可以在 R 脚本内部设置吗?
请避免建议我应该编写一个 Rmd 文件。
2个回答

3
在您的script.R文件中包含特殊格式的注释是一种在Rmarkdown文档中进行此操作的方法(请参见?compile_notebook)。例如,可以在脚本中包含以下注释以设置标题、作者和日期。
#' ---
#' title: "Crop Analysis Q3 2013"
#' author: "John Smith"
#' date: "May 3rd, 2014"
#' ---

这将会给你以下输出结果:

rmarkdown_output


1
非常感谢,惊讶的是他们在?render中没有提到这一点,甚至在另请参阅部分也没有。 - ggll
@ggll 谢谢,如果它有效,请勾选答案? - Tom McMahon
@ ggll 我删除的答案中的要点是:这种格式化样式不仅适用于元数据。它的工作原理如下:在 # 后每行文本都会按原样呈现在 md 文件中,无论是元数据还是其他内容。这就是为什么我想让你查看 ?knitr::spin 以获取有关此格式化样式更多信息的原因。 - Stéphane Laurent
全局选项可以在名为 _output.yaml 的文件中为整个目录设置,详见 http://rmarkdown.rstudio.com/pdf_document_format.html#shared_options - ggll

2

我不知道这是否是一个特别好的解决方案,但它太长了,不适合评论,所以我在这里讲一下。我查看了rmarkdown::render,我认为除非你重新定义render,否则你想要的是不可能实现的。请看第85行及以后:

metadata <- paste("\n", "---\n", "title: \"", input, 
                  "\"\n", "author: \"", Sys.info()[["user"]], "\"\n", 
                  "date: \"", date(), "\"\n", "---\n", sep = "")
if (!identical(encoding, "native.enc")) 
  metadata <- iconv(metadata, to = encoding)
cat(metadata, file = knit_input, append = TRUE)

这并不受任何条件控制。因此,一个混乱的方法是重新定义 render 并替换其中一行。我借用了一个有用的答案来回答这个问题:编辑 R 函数

body(render)[[25]] <- substitute(
  if (identical(tolower(tools::file_ext(input)), "r")) {
    spin_input <- intermediates_loc(file_with_meta_ext(input, 
                                                   "spin", "R"))
    file.copy(input, spin_input, overwrite = TRUE)
    intermediates <- c(intermediates, spin_input)
    spin_rmd <- knitr::spin(spin_input, knit = FALSE, envir = envir, 
                        format = "Rmd")
    intermediates <- c(intermediates, spin_rmd)
    knit_input <- spin_rmd

    # Our edited code starts here!
    metadata <- paste("\n", "---\n", "title: \"", getOption("yaml_title"), "\"\n", 
                  "author: \"", getOption("yaml_author"), "\"\n", "date: \"", 
                  getOption("yaml_date"), "\"\n", "---\n", sep = "")
    # Our edited code ends here!

    if (!identical(encoding, "native.enc")) 
      metadata <- iconv(metadata, to = encoding)
    cat(metadata, file = knit_input, append = TRUE)
  }
)

现在,我的文件 junk.r 如下所示:
plot(mtcars$mpg, mtcars$hp)

现在,render("junk.r") 给了我...

enter image description here

现在你可以使用 options 来使用自己的标题、作者和/或日期,或者留空。当然,编辑 .r 文件或创建 .Rmd 文件会更容易,但你已经排除了这些选项。


1
我注意到了同样的代码,但我认为它只是设置默认值。 - ggll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接