簡體   English   中英

R Markdown 文件由於數據集大而編織緩慢

[英]R Markdown file slow to knit due to large dataset

我是 R Markdown 的新手。 如果問題有一個我錯過的明顯答案,我深表歉意。

語境:

我正在使用 R Markdown(大約 9000 萬行)中的大型數據集來生成簡短報告。 在處理文件格式時,我想經常(例如,在進行更改后)編織最終的 HTML 文檔以查看格式。

問題:

問題是數據集需要很長時間才能加載,因此每個編織需要很長時間才能執行(大約五到十分鍾)。 我確實需要所有數據,因此加載較小的文件不是一個可行的選擇。 當然,由於數據被加載到全局環境中,我可以對各個塊進行編碼,但是格式化非常繁重,因為如果不查看針織產品就很難可視化格式化更改的結果。

解決問題的嘗試:

經過一番研究,我發現並嘗試使用cache = TRUEcache.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 = TRUEcache.extra = file.mtime('my-precious.csv')將導致代碼塊的執行結果被緩存,以便下次編織文件時,結果從上一次運行中加載。 但是,由於我的文件太大, cache = TRUE不起作用,所以我必須使用cache.lazy = FALSE來反轉cache = TRUE所做的事情。 最后,這意味着每次我運行文件時數據集都被加載到我的 memory 中,從而延長了編織文檔所需的時間。

我從 R 社區尋求答案的問題:

  1. 當文件大小很大(約 9000 萬行)時,有沒有辦法在 R Markdown 中緩存數據加載塊?
  2. 每次我編織 R Markdown 文件時,是否有(更好的)方法來規避耗時的數據加載過程?
  3. 我對繞過耗時的數據加載過程的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM