我不知道这是否是一个特别好的解决方案,但它太长了,不适合评论,所以我在这里讲一下。我查看了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
metadata <- paste("\n", "---\n", "title: \"", getOption("yaml_title"), "\"\n",
"author: \"", getOption("yaml_author"), "\"\n", "date: \"",
getOption("yaml_date"), "\"\n", "---\n", sep = "")
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](https://istack.dev59.com/Mnz0R.webp)
现在你可以使用 options
来使用自己的标题、作者和/或日期,或者留空。当然,编辑 .r 文件或创建 .Rmd 文件会更容易,但你已经排除了这些选项。
?render
中没有提到这一点,甚至在另请参阅部分也没有。 - ggll#
后每行文本都会按原样呈现在md
文件中,无论是元数据还是其他内容。这就是为什么我想让你查看?knitr::spin
以获取有关此格式化样式更多信息的原因。 - Stéphane Laurent_output.yaml
的文件中为整个目录设置,详见 http://rmarkdown.rstudio.com/pdf_document_format.html#shared_options - ggll