为何1.5GB数据集在R中导入仅20秒,R Markdown中却耗时15分钟?
这种情况绝对不正常,先排查环境差异再考虑换函数
首先得明确:1.5GB的CSV在R控制台20秒就能导入,到R Markdown里却耗时15分钟,这明显是环境差异引发的异常,不是read_csv本身的问题,别急着换函数,先从这些方向排查:
先排查R Markdown与控制台的环境差异
- 工作目录不一致:R Markdown默认的工作目录是它自身所在的文件夹,而你的R控制台可能用的是另一个目录。如果
read_csv用了相对路径,说不定在R Markdown里误读了远程文件或错误路径下的大文件?在导入数据的chunk里加一行print(getwd()),和控制台的getwd()对比,确认路径完全一致。 - chunk里藏了额外操作:会不会你把数据导入和后续的清洗、转换放在同一个chunk里了?看起来像是导入慢,其实是后面的操作拖了时间。把导入单独拆成一个chunk,用
system.time()精准测量耗时:# 单独的导入chunk library(readr) system.time(df <- read_csv("your_large_data.csv")) - R环境资源/加载包不同:R Markdown开头可能加载了一堆你没注意的包,或者IDE给R Markdown进程分配的内存更少,导致读取大文件时不得不使用虚拟内存,速度暴跌。在控制台和R Markdown的chunk里分别运行
sessionInfo(),对比已加载包、R版本、内存限制;用memory.limit()(Windows)或memory.size()查看内存配额,必要时调高。
如果排查后还是慢,再考虑替换导入函数
要是确认就是read_csv在R Markdown里莫名变慢,可以试试这些专为大文件优化的工具:
data.table::fread():data.table的fread是出了名的快,它会自动优化读取逻辑,对大CSV的支持拉满,语法也简洁:library(data.table) dt <- fread("your_large_data.csv")vroom::vroom():vroom采用懒加载机制,不会一次性把所有数据读进内存,而是按需加载,超大文件导入速度极快,返回的还是tibble格式,和readr兼容度很高:library(vroom) df <- vroom("your_large_data.csv")
一般来说,排查完环境差异后,导入速度就能和控制台看齐。如果还是有问题,再换上面的函数试试。
内容的提问来源于stack exchange,提问作者Viðar Ingason
相关产品推荐
相关产品推荐

