用R打开大文件

R_U*_*ser 1 memory file-io memory-management r

我想处理一个在R中包含100.000.000数据集的文件(1.9GB).实际上我只想拥有每1000个数据集.每个数据集包含3个列,由制表符分隔.我试过:data < - read.delim("file.txt"),但是R无法一次管理所有数据集.我可以直接告诉R只加载文件中的每1000个数据集吗?

在读取文件之后,我想要将第2列的数据分区.是否可以直接将第2列中写入的数字加入?是否有可能逐行读取文件,而不将整个文件加载到内存中?

谢谢你的帮助.

斯文

nei*_*fws 7

在读入R之前,您应该使用其他工具预处理文件.

要将每1000行写入新文件,可以使用sed,如下所示:

sed -n '0~1000p' infile > outfile
Run Code Online (Sandbox Code Playgroud)

然后将新文件读入R:

datasets <- read.table("outfile", sep = "\t", header = F)
Run Code Online (Sandbox Code Playgroud)

  • 在MacOSX上安装gsed之后,你可以直接在R中使用sed-command:`read.delim(pipe("/ opt/local/bin/gsed -n'1~1000p'data.txt"),header = FALSE)` .在Linux上(已经安装了gnu sed),它总是更容易:只需使用`read.delim(pipe("sed -n'1~1000p'data.txt"),header = FALSE)`.请记住,行编号从1开始,而不是0. (2认同)

Dir*_*tel 6

您可能希望查看专门用于R数据导入/导出手册.

天真的方法总是加载所有数据.你不希望这样.您可能需要另一个逐行读取的脚本(用awk,perl,python,C,......编写)并且只发出每第N行.然后,您可以通过管道直接在R中读取该程序的输出 - 请参阅Connections上的帮助.

一般来说,非常大的内存设置需要对R有所了解.耐心等待,你会得到这个,但是再一次,一个天真的方法需要大量的RAM和64位操作系统.

  • +1建议阅读手册(并给出一个链接).高性能任务视图http://cran.r-project.org/web/views/HighPerformanceComputing.html也可能有用...... (2认同)