5

我想读取一个包含 110,000,000 行和 8 列的大型 ido 文件。这些列由 2 个整数列和 6 个逻辑列组成。文件中使用了分隔符"|"。我尝试使用read.big.matrix它并花了很长时间。我也试过dumpDf了,内存用完了。我试过ff了,我听说这是一个很好的包,但我正在努力解决错误。如果我能以某种方式阅读它,我想对这张表做一些分析。如果有人有任何建议,那就太好了。亲切的问候,洛肯

4

2 回答 2

8

感谢您的所有建议。我设法弄清楚为什么我无法使错误起作用。我会给你所有的答案和建议,所以没有人会再犯我愚蠢的错误。

首先,提供给我的数据中包含一些错误,所以我从一开始就注定要失败。直到一位同事在另一款软件中发现它时,我才意识到这一点。在包含整数的列中,有一些字母,因此当read.table.ff包试图读取数据集时,它不知何故感到困惑,或者我不知道。无论如何,尽管我得到了另一个数据样本,16,000,000 行和 8 列具有正确的条目,并且它运行良好。我运行的代码如下,花了大约 30 秒阅读:

setwd("D:/data test")
library(ff)
ffdf1 <- read.table.ffdf(file = "test.ido", header = TRUE,  sep = "|")

感谢大家的宝贵时间,如果您对答案有任何疑问,请随时提出,我会尽力提供帮助。

于 2012-08-10T11:21:34.407 回答
2

您真的需要所有数据进行分析吗?也许你可以聚合你的数据集(比如从分钟值到每日平均值)。这种聚合只需要完成一次,并且有望分块完成。这样,您确实需要一次将所有数据加载到内存中。

可以使用 来分块读取scan,重要的参数是skipn。或者,将您的数据放入数据库并以这种方式提取数据块。您甚至可以使用plyr包中的函数来并行运行块,请参阅我的这篇博客文章作为示例。

于 2012-08-06T08:44:58.553 回答