【问题标题】:specifying output path for knit2html指定 knit2html 的输出路径
【发布时间】:2013-04-29 20:35:42
【问题描述】:

我无法为由 knit2html 或其相关函数生成的 html 指定输出路径。我想在调用 knit2html() 时指定“outfile”,但出现错误,

knit2html 中的错误(输入 = “test.Rmd”,输出 = “test-abcd.html”):
找不到对象“outfile”

'output' 是 markdownToHTML 的一个参数,我认为它应该可以工作。我在源中找不到使用“outfile”的任何地方。

这应该重现我的经验。

library(knitr)
library(markdown)

# a minimal example
writeLines(c("```{r hello-random, echo=TRUE}", "rnorm(5)", "```"), 
           "test.Rmd")

# this works and outputs to test.html
knit2html(input = "test.Rmd")

# this generates the above error
knit2html(input   = "test.Rmd", 
          output  = "test-abcd.html")

# breaking it down into two steps works in this simple case,
# but not in my application.  trying to diagnose that difference currently
knit("test.Rmd")    
markdownToHTML("test.md", 
               output="test-abcd.html")

相关版本信息可能有用吗?

sessionInfo()
R version 3.0.0 (2013-04-03)
Platform: x86_64-pc-linux-gnu (64-bit)

other attached packages:
[1] plyr_1.8         knitr_1.2        digest_0.6.3     markdown_0.5.4   xtable_1.7-1     reshape2_1.2.2   scales_0.2.3     ggplot2_0.9.3.1  data.table_1.8.8

【问题讨论】:

    标签: r knitr r-markdown


    【解决方案1】:

    首先,感谢您提出的非常清晰且可重复的问题。如果你看一下knit2html函数源代码,你就能明白问题所在了:

    R> knit2html
    function (input, ..., envir = parent.frame(), text = NULL, quiet = FALSE, 
        encoding = getOption("encoding")) 
    {
        if (is.null(text)) {
            out = knit(input, envir = envir, encoding = encoding, 
                quiet = quiet)
            markdown::markdownToHTML(out, outfile <- sub_ext(out, 
                "html"), ...)
            invisible(outfile)
        }
        else {
            out = knit(text = text, envir = envir, encoding = encoding, 
                quiet = quiet)
            markdown::markdownToHTML(text = out, ...)
        }
    }
    <environment: namespace:knitr>
    

    如果text 参数是NULL(即,如果您提供文件作为输入而不是字符向量),那么给定文件将传递给knit 函数,而markdownToHTML 函数是调用方式如下:

    markdown::markdownToHTML(out, outfile <- sub_ext(out, "html"), ...)
    

    因此在这种情况下,输出文件名是通过将现有文件扩展名替换为html 生成的,您不能提供自己的输出文件名作为参数。

    【讨论】:

    • 感谢@juba,我想这可以解决这个问题。我以为我什至看过那个函数,但一定错过了我解决问题模糊中的重要部分。我想理想情况下它会检查“输出”,如果没有给出,则只使用默认名称。
    • @SamSwift 很抱歉给您带来麻烦;这是knitr的一个bug,已在开发版中修复:github.com/yihui/knitr
    • 注意:要阅读 sub_ext 的源代码,您需要使用 三个 :'s: knitr:::sub_ext 打印。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2015-11-20
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多