用 rbind 附加数据帧的神秘问题
Posted
技术标签:
【中文标题】用 rbind 附加数据帧的神秘问题【英文标题】:Mysterious problems appending data frames with rbind 【发布时间】:2012-12-29 21:36:07 【问题描述】:我正在尝试将多个文件合并到一个主文件中。有 5 个结构相同的文件,我可以毫无问题地将每个文件单独读入数据框中。我什至为 200 多个变量手动设置列类,而不是让 R 决定,因为我认为这是导致问题的原因。但是,将任意两个文件附加在一起会导致内存不足。
警告信息: 1:在 rbind(deparse.level, ...) 中: 已达到 4043Mb 的总分配:请参阅 help(memory.size)
所以我做了一些实验: 我将两个不同的文件 1 块连接在一起。这样可行。 我将文件 2 的一部分加入到文件 1 的一部分中。这行得通。 我将文件 2 的一大块加入到原始文件 1 中。这行得通。
每个文件的大小都略低于 200MB,所以我不确定我是否应该耗尽内存。如果有人感兴趣,数据来自hearstchallenge.com。比赛已经结束了,我们只是将数据用于分析实验(而不是编程!)。
对于如何解决这个问题有什么建议吗?
【问题讨论】:
+1 表示“泡菜的小菜”。您遇到的问题是 R 需要 4043 MB 的连续内存才能完成操作。我想你没有那么多闲钱。您可以尝试使用像sed
这样的命令行工具来加入R 之外的文件,或者像ff
这样的大数据包之一。
write.table
也有一个append
选项。
> system("cat file1 file2 file3 file4 file5 >>big.ass.file")
从data.table
包中查看rbindlist
,我认为...
糟糕——使用shell
将比使用system
容易得多
【参考方案1】:
我也遇到过类似的问题。解决方案是不要在大数据上使用 rbind() 或 cbind()。他们倾向于泄漏内存。
要仅使用 R 来解决您的问题,请首先创建一个数据框,该数据框具有在您将各个部分放在一起后数据框将具有的维度。然后使用 assignments 填充大数据框。
【讨论】:
对于大数据,不要使用data.frames,使用data.tables。以上是关于用 rbind 附加数据帧的神秘问题的主要内容,如果未能解决你的问题,请参考以下文章