繁体   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