2013-04-29 13 views
6

Ich habe Probleme bei der Angabe eines Ausgabepfades für die HTML-Seite von knit2html oder seine abhängigen Funktionen generiert. Ich möchte 'outfile' in dem Aufruf angeben knit2html(), aber ich habe den Fehler,Angabe von Ausgabepfad für knit2html

Fehler bei knit2html (Input = "test.Rmd", Ausgabe = "test-abcd.html"):
Objekt 'outfile' ist ein Parameter von markdownToHTML nicht

'output' gefunden, die ich sollte funktionieren würde denken. Ich kann nirgendwo in der Quelle finden, wo "outfile" verwendet wird.

Dies sollte meine Erfahrung reproduzieren.

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") 

relevante Versionsinfo könnte nützlich sein?

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 

Antwort

3

Zuerst, danke für die sehr klare und reproduzierbare Frage. Wenn Sie einen Blick auf der knit2html Funktion Quellcode nehmen, können Sie verstehen, was das Problem ist:

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> 

Wenn das text Argument NULL (dh, wenn Sie eine Datei als Eingabe zur Verfügung stellen, anstatt ein Zeichen Vektor) ist, dann wird die angegebene Datei an die knit Funktion übergeben, und die markdownToHTML Funktion die folgende Art und Weise aufgerufen:

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

So in diesem Fall der Name der Ausgabedatei durch Ersetzen die vorhandene Dateinamenerweiterung erzeugt wird, mit html, und Sie kann nicht p Geben Sie Ihren eigenen Ausgabedateinamen als Argument an.

+0

Dank @juba, denke ich, dass dies zur Ruhe bringt. Ich dachte, ich hätte mir diese Funktion einmal angeschaut, aber ich muss den wichtigen Teil meiner Problemlösungsunschärfe übersehen haben. Ich denke, im Idealfall würde es nach "Ausgabe" suchen und nur den Standardnamen verwenden, wenn keiner angegeben wurde. –

+0

@SamSwift Entschuldigung für das Problem; Es ist ein Bug von knitr, der in der Entwicklungsversion behoben wurde: https://github.com/yihui/knitr –

+1

NB: Um die Quelle für 'sub_ext' zu lesen, müssen Sie mit _three_': ''s:' drucken knitr ::: sub_ext'. – isomorphismes

Verwandte Themen