【问题标题】:knitr - set chunk options *outside* document?knitr - 设置块选项*外部*文档?
【发布时间】: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@我更喜欢)

【问题讨论】:

    标签: r knitr


    【解决方案1】:

    可以在文档之外设置全局选项,dev 选项是唯一的例外。当输出为 HTML 时,dev 在内部由render_markdown() (重新)设置为'png'。如果你想改变这个选项,你必须在它之前调用这个函数:

    knit2 <- function (input, out=c('pdf', 'html')) {
      if (out == 'html') {
        render_markdown()
        # use SVG for HTML output
        opts_chunk$set(dev='svg')
      }
    
      # knit to md
      o <- knit(input)
    
      # knit md to html or pdf
      pandoc(input=o, format=ifelse(out == 'pdf', 'latex', 'html'))
    }
    

    实际上我遇到了一个非常相似的问题,并在example 084 中说明了这一点(请参阅那里的084-pandoc.R;我将dev 更改为'pdf' 用于Markdown)。

    【讨论】:

    • 啊哈,太棒了。我注意到在render_markdown 中设置了dev 选项并拼凑了一个解决方案,我从函数主体中删除了该行,但它很难看!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    相关资源
    最近更新 更多