【发布时间】:2013-04-09 16:41:51
【问题描述】:
我正在尝试在我对knit 的调用外部设置一个全局块选项,如下所示:
opts_chunks$set(dev='pdf')
knit(input)
但是,它不起作用,因为knit 似乎在knit 中使用了一组新的opts_chunks。
是否可以在对knit 的调用之外设置全局块选项,并将其应用于对knit 的调用?
我这样做的原因:
我正在编写Rmd (R markdown) 文档,我希望能够将这些文档编成 pdf 或 HTML,我的选择,如下所示:
knit2 <- function (input, out=c('pdf', 'html')) {
# set the appropriate output image format
opts_chunk$set(dev=ifelse(out == 'pdf', 'pdf', 'svg')) # <--
# knit to md
o <- knit(input)
# knit md to html or pdf
pandoc(input=o, format=ifelse(out == 'pdf', 'latex', 'html'))
}
所以我的想法是我可以knit2('mydoc.Rmd', 'pdf') 或knit2('mydoc.Rmd', 'html') 并且我不必根据输出更改 Rmd。
我遇到的问题是我希望我的图像是 SVG 用于 HTML 输出,PDF 用于 PDF 输出(我想要矢量图形,但 SVG 在 Latex 中不起作用,而 pdf 在 HTML 中不起作用,所以我需要根据输出格式修改这个),即
opts_chunk$set(dev=ifelse(out == 'pdf', 'pdf', 'svg'))
我知道,如果我将它与out 的定义一起放在我的 Rmd 文件中的一个块中,它将起作用。
但是,我不想将它嵌入到 mydoc.Rmd 中,因为我无法分配 output,直到 knit2 被称为我知道我真正想要的输出。
因此,我希望 knit2 在调用knit 之前以某种方式为我设置dev 选项,并让该选项适用于knit 的持续时间。 (我也接受将我的opts_chunk$set(dev=ifelse(out=='pdf', 'pdf', 'svg')) 嵌入到我的 Rmd 文件中,前提是我可以在 Rmd 文件外部定义out,即在knit2 中,尽管如果我可以从@ 处理这一切987654343@我更喜欢)
【问题讨论】: