R语言使用read.table.ffdf读取CSV时出现ff包write error错误如何解决
read.table.ffdf触发ff写入错误的排查解决方法
# 原报错信息 Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered, : write error
该报错本质为ff包写入内存映射临时文件时触发故障,与CSV变量数量无直接关联,可按照以下步骤排查解决:
1 检查ff临时目录的权限与存储空间
ff包默认会将内存映射的临时二进制文件写入系统默认临时目录,首先执行以下命令查看当前临时目录路径:
getOption("fftempdir")
确认两个条件:
- 该目录剩余磁盘空间不小于2GB(51万行20列的CSV对应的ff文件通常不超过1GB,预留足够缓存空间即可)
- 当前R进程对该目录有读写权限,无杀毒软件、系统权限管控拦截写入操作
如果不符合要求,可手动更换为有权限的自定义目录:
# 示例为Windows路径,Linux/macOS对应修改为自己的目录即可 options(fftempdir = "D:/r_ff_temp")
2 修正colClasses参数配置
原代码中colClasses=NA不符合read.table.ffdf的参数规范,该参数需传入各列对应的类型向量,或设置为NULL让函数自动识别字段类型,修改代码如下:
dépenses<- read.table.ffdf( file="COVID-19_Expenditures_Report.csv", sep=",", VERBOSE=TRUE, # 开启日志可查看具体执行到哪一步报错,方便定位问题 header=TRUE, colClasses=NULL )
3 校验CSV文件格式完整性
确认CSV文件未被其他程序占用、无损坏,且所有行的字段数量与表头一致,可先读取前10行验证格式:
head(readLines("COVID-19_Expenditures_Report.csv"), 10)
检查输出的每一行逗号分隔数量是否和20个变量匹配,排除某行多分隔符、少分隔符的格式问题。
4 更新ff相关依赖包
旧版本ff、ffbase包存在已知的写入bug,可先更新包后重启R会话重试:
install.packages(c("ff", "ffbase"))
内容的提问来源于stack exchange,提问作者math geek
相关产品推荐
相关产品推荐

