R Markdown文件由于数据集大而编织缓慢



我是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

为了克服这个错误,我在chunk选项中添加了cache.lazy = FALSE(如上所述(。不幸的是,虽然代码有效,但编织文档所需的时间并没有减少。

我对这个过程的理解有限,因为有了cache = TRUEcache.extra = file.mtime('my-precious.csv'),就会缓存代码块的执行结果,这样下次编织文件时,就会加载上一次运行的结果。但是,由于我的文件太大,cache = TRUE无法工作,所以我必须使用cache.lazy = FALSE来反转cache = TRUE所做的操作。最后,这意味着每次运行文件时都会将数据集加载到我的内存中,从而延长了编织文档所需的时间。

我向R社区寻求答案的问题:

  1. 当文件大小较大(约9000万行(时,是否有方法在R Markdown中缓存数据加载块
  2. 每次编织R Markdown文件时,有没有一种(更好的(方法可以绕过耗时的数据加载过程
  3. 我对绕过时间密集型数据加载过程的cache = TRUE方法的理解正确吗?如果不是,为什么cache = TRUE方法对我不起作用

如有任何帮助,我们将不胜感激。

每次编织R Markdown文件时,是否有(更好的(方法来规避耗时的数据加载过程

是的。在Rmarkdown报告的外部执行计算。

绘图可以保存到文件中,并通过knitr::include_graphics(myfile)包含在报告中表格可以保存到较小的摘要文件中,通过fread加载,并通过kable显示。

请注意,如果需要在循环中打印表,则应指定result=asischunk选项。

```{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,它比基本函数效率高得多。

事实上,不久前我发布了一个类似的问题。你并不孤单。

最新更新