R语言读取CSV的4个常用函数该如何选择?
R语言CSV读取函数选型指南
以下是你提到的4种读取方式的差异和适用场景:
# 1. readr包的通用分隔符读取函数,手动指定逗号为分隔符 data <- read_delim("imported_data.csv", delim = ",") # 2. readr包预封装的CSV专用读取函数,和上面的read_delim调用逻辑完全一致 data <- read_csv("imported_data.csv") # 3. R基础utils包自带的原生CSV读取函数 data <- read.csv("imported_data.csv") # 4. data.table包的高性能读取函数 data <- fread("imported_data.csv")
单就这4个函数的选择逻辑
- 优先用
read.csv()的场景:你运行脚本的环境不能安装第三方包、脚本需要兼容非常老的R版本、只需要快速读取小CSV做简单处理,不需要额外的进阶功能,这个函数零依赖,兼容性最高。缺点是读取大文件速度慢,R 4.0以前的版本默认会将字符串列转为因子类型,需要手动指定stringsAsFactors = FALSE。 - 优先用
read_csv()/read_delim()的场景:你日常用tidyverse生态做数据分析,需要输出tibble格式做后续处理,这两个函数读取速度比基础包快2-3倍,列类型推断更智能,支持跳过注释行、指定列类型、读取部分行等常用进阶参数,是普通数据分析场景下的最优选择。这两个函数功能完全等价,你只需要选更短的read_csv()写就可以。缺点是需要先安装readr包,GB级以上的超大文件读取性能不如fread。 - 优先用
fread()的场景:你需要读取GB级别的超大CSV文件、对读取速度有很高要求,fread是这四个函数里速度最快的,比readr系列还要快2-5倍,还支持自动识别分隔符、读取指定列、断点续读等进阶功能,适合大数据量的处理场景。缺点是输出默认是data.table格式,如果你后续用tidyverse函数处理需要手动转格式,参数体系更复杂,学习成本稍高。
同类功能函数的通用选型方法
遇到更多同类型的功能函数时,可以按下面的优先级判断选哪个:
- 匹配当前技术栈:如果你整个项目都用tidyverse生态,就优先选tidyverse体系下的函数;如果项目用data.table做高性能处理,就选对应生态的函数,避免跨生态的格式转换开销和兼容问题。
- 匹配数据规模:小文件随便选,哪个顺手用哪个;中大型文件优先选性能更好的函数;超大型文件优先选专门做了大文件优化的函数。
- 匹配特殊需求:如果你需要某类特殊功能(比如读取加密CSV、增量读取、自动类型校验),优先选原生支持该功能的函数,避免自己写额外逻辑增加出错概率。
- 匹配兼容性要求:如果脚本要共享给其他人或者在不同环境运行,优先选依赖少、兼容版本范围广的函数,或者在脚本开头添加依赖自动安装的逻辑。
内容的提问来源于stack exchange,提问作者Freynes
相关产品推荐
相关产品推荐

