在R中使用fread出现错误--字符串中嵌入了空字符:'\0'。

11

我正在尝试读取一个大于4GB的csv文件,但是当我使用fread命令时它会产生一个错误。

library(data.table)
csv1 <- fread("cleaned.csv",sep = ",",colClasses = "character",showProgress = TRUE)

错误: 字符串中嵌入了空字符:'\0'

经过一番查找,我发现可以使用sed函数,例如在这个stackoverflow问题中提到的方法。但是我不知道如何在我的情况下使用它。请帮忙!

更新: 我尝试按照评论中描述的方法使用sed函数,但是它们会抛出一个错误。

sed无法刷新标准输出,设备上没有剩余空间

更新2: 在一些同事的帮助下,我已经解决了这个问题。然而,我仍然希望自动化这个活动,因为我必须为每个文件重复这个过程。期望的自动化方式可以从R内部或使用BASH脚本实现。有什么建议吗?


1
sed 是 Bash 工具之一,它在所有 Linux 发行版中都默认安装。 - Avinash Raj
1
为什么不尝试使用 fread("sed 's/\\0//g' mycsv.csv") 呢? - Avinash Raj
1
Linux- 使用Ubuntu 14.04操作系统,并使用Rstudio服务器。 - Shoaibkhanz
1
对于原地修改,请使用命令sed -i 's/\\0//g' /src/path/mycsv.csv - Avinash Raj
1
由于 sed 似乎无法正常工作,您可能想尝试使用 trtr < file-with-nulls -d '\000' > file-without-nulls - scribbles
显示剩余5条评论
1个回答

4

这些csv文件中出现了^@,并且它们被放置在空值中,但是无论如何都无法通过sed命令进行搜索或替换以解决问题,我遵循了以下解决方案。

在Linux中,进入文件目录并使用vim命令,例如:

vim filename.csv

:%s/CTRL+2//g

ESC #切换到命令模式

:wq #保存文件

我不得不为每个文件手动执行此操作。但是,我仍在寻找一种自动化此过程的方法,可以在R中实现,也可以使用BASH脚本。


2
Vim脚本(gvim,vim)可以很容易地适应`vi -s edit.vim filename.txt`其中edit.vim包含(:wq是可选的)`:%s/CTRL+2//g :wq`您还可以使用:argdo命令在所有参数文件上运行命令。 - scribbles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接