2013-04-29 28 views
6

Tôi gặp sự cố khi chỉ định đường dẫn đầu ra cho html được tạo bởi hàm đan2html hoặc các hàm phụ thuộc của nó. Tôi muốn chỉ định 'outfile' trong lệnh gọi đến knit2html(), nhưng tôi gặp lỗi,chỉ định đường dẫn đầu ra cho knit2html

Lỗi trong knit2html (input = "test.Rmd", output = "test-abcd.html"):
đối tượng 'outfile' không tìm thấy

'đầu ra' là một tham số của markdownToHTML mà nên làm việc tôi nghĩ. Tôi không thể tìm thấy bất cứ nơi nào trong nguồn nơi 'outfile' được sử dụng.

Điều này sẽ tái tạo trải nghiệm của tôi.

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

thông tin phiên bản có liên quan có thể hữu ích?

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 

Trả lời

3

Đầu tiên, cảm ơn câu hỏi rất rõ ràng và có thể lặp lại được. Nếu bạn có một cái nhìn vào mã nguồn knit2html chức năng, bạn có thể hiểu vấn đề là gì:

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> 

Nếu đối số textNULL (ví dụ, nếu bạn cung cấp một tập tin như là đầu vào thay vì một vector nhân vật), sau đó các tập tin nhất định được thông qua với knit chức năng, và các markdownToHTML hàm được gọi theo cách sau:

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

Vì vậy, trong trường hợp này tên tập tin đầu ra được tạo ra bằng cách thay thế phần mở rộng tên tập tin hiện có với html, và bạn không thể p rovide tên tập tin đầu ra của riêng bạn làm đối số.

+0

Cảm ơn @juba, tôi đoán rằng việc này sẽ nghỉ ngơi. Tôi nghĩ rằng tôi thậm chí đã nhìn vào chức năng đó, nhưng phải bỏ lỡ phần quan trọng trong việc giải quyết vấn đề của tôi. Tôi đoán lý tưởng nó sẽ kiểm tra cho 'đầu ra' và chỉ sử dụng tên mặc định nếu không có được đưa ra. –

+0

@SamSwift xin lỗi vì sự cố; nó là một lỗi của knitr đã được sửa trong phiên bản phát triển: https://github.com/yihui/knitr –

+1

NB: để đọc nguồn cho 'sub_ext' bạn cần in bằng _three_': ''s:' knitr ::: sub_ext'. – isomorphismes