2017-09-15 66 views
1

我基於.Rnw模板反覆生成數以千計的PDF報告。我所包含的圖表預先生成爲.png,不是在飛行中生成的。R sweave在PDF輸出中寫入連接關閉警告消息

我的問題是,大約1%的時間(我haven't迄今發現的模式),我得到一個非常明顯的粉紅色的警告信息:

##警告:cerrando LA conenexion 3( report.Rnw)闕沒有ESTA siendo utilizada

我用於生成從所述Sweave PDF將R代碼是:

Sweave2knitr(file = "report.Rnw", 
      output = "./temp/report-knitr.Rnw") 
knit2pdf(input = "./temp/report-knitr.Rnw", 
     quiet = TRUE, 
     clean = TRUE, 
     envir = environment(), 
     encoding = "UTF-8") 

此外,我使用庫kableExtra到根erate表和xelatex。

顯然,重新生成文件會使消息消失,所以我使用包pdftools打開每個報告並檢查錯誤消息,但我仍然對爲什麼收到消息感到擔憂和好奇,因爲我沒有明確地打開我的腳本中的任何連接,所以R/LaTeX編譯器的一部分必須這樣做。

如何控制我的腳本不會打開任何連接?

+0

由於它列出了「report.Rnw」作爲連接名稱,它看起來好像問題來自Sweave2knitr()調用。但你爲什麼要這樣?爲什麼不使用Sweave()如果它是Sweave源,或者將原始數據轉換一次,而不是數千次? – user2554330

+0

@ user2554330自從我加入該行後已經有一段時間了,我對LaTeX和Sweave很陌生,所以我不能說爲什麼在這種情況下我必須先使用Sweave2knitr。根據它的文檔,它使得.Rnw knitr兼容。我在PDF中動態地插入了一些LaTeX代碼,如果我運行** knit2pdf(input =「./report.Rnw」),它就不會生成報告。 – Narciandi

+0

我收到的錯誤信息有點神祕,但它說:**退出52-55行(./report.Rnw) 對象'tex'未找到 警告消息: In remind_sweave(if(in.file )輸入,sweave_lines): 看來,您正在使用第39,51,60,69,112,149,157,167,175,185,198,209,217,227, 236,246,256,266,295,305,333,347,373,416,445,465,490,509,533,552,577,589,599,624,634,648,658,677,689,以及在此處引用作爲參考。 703,715,725;您可能需要使用Sweave2knitr(「./ report.Rnw」)將其轉換爲knitr ** – Narciandi

回答

1

Sweave2knitr()中有一個錯誤。它打開到源文件的連接並從不關閉它。連接將在下一次垃圾收集時關閉,這可能發生在相當不可預測的時間。

所以要解決這個問題,不要多次撥打Sweave2knitr()(正如我在我的評論中所建議的),或者在致電knit2pdf()之前致電gc()以產生警告。這可能會減慢速度,但可能並不明顯,因爲knit2pdf可能很慢。

+0

謝謝!我剛剛合併了你的公關https://github.com/yihui/knitr/pull/1432,這意味着這個問題已經在knitr的開發版本中修復了。 –