RStudio中如何调整max.print上限以完整导入全量数据集
问题根因
reached 'max' / getOption("max.print")警告和数据导入行数限制无关。max.print参数仅控制R控制台允许打印输出的最大行数,不约束数据读取的行数阈值。
很多用户会误将控制台打印出来的行数当成实际导入的行数:只要控制台打印触发了max.print阈值,后续行只是不显示在控制台,不是没有被导入。你判断的“仅成功导入3817125行”大概率是控制台显示的行数,不是实际导入的数据量;如果确实存在行数截断,也是读取函数参数配置错误、内存不足等原因导致,和max.print配置没有关系。
解决方案
1. 修正无效的max.print配置
不要将max.print设置为和全量数据行数一致的数值,1500万行内容直接输出到控制台会直接导致R Studio无响应卡死,将其调整为满足日常查看需求的合理值即可:
# 控制台最多打印1000行,避免大对象输出卡顿 options(max.print = 1000)
注意:只要不直接在控制台输入完整数据框变量名触发全量打印,就不会触发max.print相关警告,该警告本身不影响内存中存储的数据完整性。
2. 修正数据读取函数的参数配置
不同数据读取函数的行数控制参数不同,对应排查修改即可:
- 若使用基础R的
read.csv/read.table函数:检查是否误设置nrows参数,该参数默认值-1代表读取全部行,若手动设置为固定数值会触发数据截断,全量读取参考写法:
df <- read.csv( file = "你的数据文件本地路径.csv", nrows = -1, comment.char = "", stringsAsFactors = FALSE )
- 若使用readr包的
read_csv/read_delim函数:检查是否误设置n_max参数,该参数默认值Inf代表读取全量,若设置为固定数值会触发截断,全量读取参考写法:
library(readr) df <- read_csv( file = "你的数据文件本地路径.csv", n_max = Inf, show_col_types = FALSE )
- 1500万行级别数据优先使用data.table包的
fread函数读取,该函数无内置行数限制,读取速度快、内存占用低,默认配置即可读取全量数据:
library(data.table) df <- fread("你的数据文件本地路径.csv")
3. 排查内存不足导致的读取截断
1500万行结构化数据导入时会占用数GB内存,若R进程分配到的内存不足,会出现数据静默截断的问题:
- Windows系统可运行
memory.size()查看当前R进程已使用的内存量,运行memory.limit()查看当前R进程可用的内存上限 - 若内存上限不足,先关闭其他占用内存的程序,再手动调整R可用内存上限(根据自身电脑总内存调整,例如总内存16G可分配12G给R):
memory.limit(size = 12000)
- 导入阶段不要加载多余包、不要同步做复杂的列转换/格式处理,减少导入阶段的内存开销。
4. 导入结果校验
导入完成后不要直接输入数据框变量名触发全量打印,用以下方式校验导入结果,不会触发max.print警告:
# 查看导入数据的总行数,确认是否和文件行数一致 nrow(df) # 仅查看数据前6行,确认字段读取正常 head(df)
内容的提问来源于stack exchange,提问作者abdelrhim eltijani
相关产品推荐
相关产品推荐

