我正在尝试在我的调用之外knit
设置一个全局块选项,如下所示:
opts_chunks$set(dev='pdf')
knit(input)
但是,它不起作用,因为knit
似乎使用了一组新的opts_chunks
inside knit
。
是否可以在调用之外设置全局块选项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')
ORknit2('mydoc.Rmd', 'html')
并且我不必根据输出更改 Rmd。
我遇到的问题是我希望我的图像是 SVG 用于 HTML 输出,PDF 用于 PDF 输出(我想要矢量图形但 SVG 在 Latex 中不起作用,而 pdf 在 HTML 中不起作用,所以我需要修改这基于输出格式),即
opts_chunk$set(dev=ifelse(out == 'pdf', 'pdf', 'svg'))
我知道如果我将它与 的定义一起放在我的 Rmd 文件中的一个块中out
,它将起作用。但是,我不想将它嵌入其中mydoc.Rmd
,因为我无法分配output
直到knit2
被称为我知道我真正想要的输出。
因此,我希望 knit2dev
在调用之前以某种方式为我设置选项,knit
并让该选项适用于knit
. (我也接受将 my 嵌入opts_chunk$set(dev=ifelse(out=='pdf', 'pdf', 'svg'))
到我的 Rmd 文件中,前提是我可以在 Rmd 文件out
之外定义,即 in knit2
,但如果我能处理这一切,knit2
我会更喜欢)