[英]R Markdown file slow to knit due to large dataset
我是 R Markdown 的新手。 如果問題有一個我錯過的明顯答案,我深表歉意。
語境:
我正在使用 R Markdown(大約 9000 萬行)中的大型數據集來生成簡短報告。 在處理文件格式時,我想經常(例如,在進行更改后)編織最終的 HTML 文檔以查看格式。
問題:
問題是數據集需要很長時間才能加載,因此每個編織需要很長時間才能執行(大約五到十分鍾)。 我確實需要所有數據,因此加載較小的文件不是一個可行的選擇。 當然,由於數據被加載到全局環境中,我可以對各個塊進行編碼,但是格式化非常繁重,因為如果不查看針織產品就很難可視化格式化更改的結果。
解決問題的嘗試:
經過一番研究,我發現並嘗試使用cache = TRUE
和cache.extra = file.mtime('my-precious.csv')
(根據 Yihui 的 Bookdown 的這一部分) 。 但是,此選項不起作用,因為它導致以下結果:
Error in lazyLoadDBinsertVariable(vars[i], from, datafile, ascii, compress, :
long vectors not supported yet: connections.c:6073
Calls: <Anonymous> ... <Anonymous> -> <Anonymous> -> lazyLoadDBinsertVariable
為了克服這個錯誤,我將cache.lazy = FALSE
添加到塊選項中( 如此處所述)。 不幸的是,雖然代碼有效,但編織文檔所需的時間並沒有減少 go。
我對這個過程的有限理解是,擁有cache = TRUE
和cache.extra = file.mtime('my-precious.csv')
將導致代碼塊的執行結果被緩存,以便下次編織文件時,結果從上一次運行中加載。 但是,由於我的文件太大, cache = TRUE
不起作用,所以我必須使用cache.lazy = FALSE
來反轉cache = TRUE
所做的事情。 最后,這意味着每次我運行文件時數據集都被加載到我的 memory 中,從而延長了編織文檔所需的時間。
我從 R 社區尋求答案的問題:
cache = TRUE
方法的理解是否正確? 如果不是,為什么cache = TRUE
方法對我不起作用?任何幫助表示贊賞。
每次我編織 R Markdown 文件時,是否有(更好的)方法來規避耗時的數據加載過程?
是的。 在 Rmarkdown 報告之外執行您的計算。
繪圖可以保存到文件中並通過knitr::include_graphics(myfile)
包含在報告中。表格可以保存到較小的摘要文件中,通過fread
加載並通過kable
顯示。
請注意,如果您需要循環打印表格,則應指定result=asis
塊選項。
```{r my_chunk_label, results='asis', echo=F}
for(i in 1:length(data_full)) {
print(kable(data_full[[i]]))
cat('\n')
}
```
運行一次昂貴的計算,保存結果。 使用易於格式化的輕量級Rmarkdown
報告來使用這些結果。
如果你還有大的 csv 文件要加載,你應該使用data.table::fread
比基本函數更有效。
不久前,我實際上發布了一個類似的問題。 你不是一個人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.