2013-04-29 10 views
6

Mam problem z określeniem ścieżki wyjściowej dla html generowanego przez knit2html lub jego zależne funkcje. Chciałbym podać '' outfile w zaproszeniu do knit2html(), ale pojawia się błąd,określanie ścieżki wyjściowej dla knit2html

Błąd w knit2html (wejście = "test.Rmd", moc = "test-abcd.html"):
obiekt „plik_wy” nie znaleziono

„wyjście” jest parametrem, który powinien działać markdownToHTML myślałem. Nie mogę znaleźć nigdzie w źródle, w którym użyto "pliku wyjściowego".

To powinno powielić moje doświadczenie.

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

odpowiednie informacje o wersji mogą być przydatne?

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 

Odpowiedz

3

Po pierwsze, dziękuję za bardzo jasne i powtarzalne pytanie. Jeśli przyjrzeć kodu źródłowego knit2html funkcji, można zrozumieć, na czym polega problem:

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> 

Jeśli text argument jest NULL (czyli jeśli podasz plik jako wejście zamiast wektora znaków), wówczas dany plik jest przekazywany do funkcji knit, a funkcja markdownToHTML nazywa się w następujący sposób:

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

Więc w tym przypadku nazwa pliku wyjściowego jest generowany przez zastąpienie istniejącego rozszerzenia nazwy pliku z html, a ty nie można p rovide własną nazwę pliku wyjściowego jako argument.

+0

Dzięki @juba, wydaje mi się, że to odpoczywa. Myślałem, że nawet spojrzałem na tę funkcję, ale musiałem przegapić ważną rolę w moim rozmyciu. Najlepiej byłoby, gdyby sprawdził "wynik" i użyłby tylko nazwy domyślnej, jeśli żadna nie została podana. –

+0

@SamSwift przepraszam za kłopot; jest to błąd knitr, który został naprawiony w wersji rozwojowej: https://github.com/yihui/knitr –

+1

NB: aby odczytać źródło 'sub_ext' musisz wydrukować _three_': '' s: ' knitr ::: sub_ext'. – isomorphismes

Powiązane problemy