【问题标题】:R: How to read in Large Dataset (>35 MM rows) with R on Windows piece by piece?R:如何在 Windows 上使用 R 逐个读取大型数据集(>35 MM 行)?
【发布时间】:2014-03-26 21:02:44
【问题描述】:

如何在 R 中读取/操作超出分配内存限制的数据集?

编辑: 到目前为止帮助很大,谢谢。让我添加一个额外的约束。该服务器是企业拥有的,我没有管理权限。有没有办法使用 read.table 或类似的东西来读取部分文件(例如,通过指定 nrows 一次只读取 100,000 行)?需要一种可以在当前环境下运行的解决方法,因此不能使用 fread、bigmemory 等。

我的目标数据集包含大约 3200 万行和 30 列,分为 12 个大致相等的文件(有些可读,有些不可读)。

文件是“|”分隔并存储在 12 个单独的文件中的远程服务器上。大约一半的文件可以使用 R 读取,另一半超过了允许的限制。

我正在使用一个简单的读取和 rbind 脚本:

path<-"filepath/mydata/contains 12 files.txt/"
fulldf<-data.frame()
for(i in 1:length(dir(path))){
    file1<-read.table(file=paste0(path,dir(path[i]), sep="|", fill=T, quote="\"")
    fulldf<-rbind(fulldf,file2)
}

我主要希望能够对数据进行子集化并将其写入 .csv(例如,逐块读取数据,按位置子集然后 rbind),但有些文件太大而无法阅读。

有没有办法一块一块地读取大文件的一部分,即将一个不可读的文件分成可读的部分?

系统: 微软视窗服务器 2003 R2 企业版 服务包 2

电脑: 英特尔(R)至强(TM) MP CPU 3.66GHz 3.67 GHz,12.0 GB 内存 物理地址扩展

> sessionInfo()
R version 2.12.1 (2010-12-16)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.7.1

loaded via a namespace (and not attached):
[1] tools_2.12.1

【问题讨论】:

  • 即使是最基本的谷歌搜索也会引导您选择几个选项,包括 ffbigmemory 或 R 中任何关系数据库的可能首选用法。 (附注:您的 R 严重过时了。升级可能会为您省去很多不必要的麻烦。)
  • 将您的 R 升级到 3.0.2,将sqlite 安装到您的机器上并使用dplyr

标签: r large-data


【解决方案1】:

我认为iotoolschunk.readerread.chunkchunk.apply 可能是您正在寻找的。

如果您无法安装软件包,那么我收集带有 nrowsskip 参数的 read.table 应该怎么做?您可以使用colClasses 参数来确保它们都具有相同的列类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多