使用rmarkdown :: render来设置文档标题(标题,作者,日期)

时间:2016-10-08 01:04:43

标签: r knitr r-markdown

我使用rmarkdown::render("script.r")创建R版脚本的HTML版本。输出以 script.r 作为标题,我作为作者登录,以及当前date作为日期开始。我不想放弃我的登录信息,也不想放弃我的工作时间表。

我知道这个元数据(标题,作者,日期)可以在Rmd文件中的YAML块中设置,但我想避免创建/编辑此文件,并且只能使用原始R脚本

有没有办法通过rmarkdown::renderknitr::opts_chunk$set等其他功能设置(标题,作者,日期)元数据?

或者,可以在R脚本中设置此元数据吗?

请避免建议我写一个Rmd文件而不是..

2 个答案:

答案 0 :(得分:3)

Rmarkdown文档(请参阅?compile_notebook)介绍了通过在script.R文件中添加特殊格式的评论来实现此目的的一种方法。

例如,在脚本中包含此注释以设置标题,作者和日期。

#' ---
#' title: "Crop Analysis Q3 2013"
#' author: "John Smith"
#' date: "May 3rd, 2014"
#' ---

这将为您提供以下输出:

rmarkdown_output

答案 1 :(得分: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并替换其中一条线。我正在为这个问题借用一个有用的答案:Editing R functions

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文件会更容易,但是你已经排除了这些文件。