无法分配的向量在 R 中执行 inner_join 时大小 Gb
解决方案
阅读了以下人发表的评论后 @Jon Spring、@Sweep Dodo 和 @Gregor Thomas 仔细一看,我意识到问题是 chr 列中存在大量重复键。我只是通过将两个表的 chr:start 粘贴在一起来创建新列,这样重复条目就会少得多。此后,inner_join
将在几秒钟内完成。
问题
在 Windows 11 上运行 64 位 R 4.1.2。
我有两个表表
1:
chr | start | end |
---|---|---|
chr7 | 117120017 | 117120018 |
chr7 | 117120018 | 117120019 |
chr7 | 117120019 | 117120020 |
chr7 | 117120020 | 117120021 |
chr7 | 117120021 | 117120022 |
chr7 | 117120022 | 117120023 |
188700 行 x 3 列
表 2:
chr | starthg38 | endhg38 |
---|---|---|
chr7 | 117479963 | 117479964 |
CHR7 | 117479964 | 117479965 |
CHR7 | 117479965 | 117479966 |
CHR7 | 117479966 | 117479967 |
CHR7 | 117479967 | 117479968 |
CHR7 | 117479968 | 117479969 |
188700 行 x 3 列
我尝试执行简单的内部联接,
new_table <- inner_join(table1, table2, by = c("chr" = "chr"))
并得到以下错误
错误:无法分配大小为 132.7 Gb 的向量
基于此处建议的解决方案 R 内存管理/无法分配大小为 n Mb 的向量< /a>
我尝试过,
gc()
但
memory.size(max = TRUE)
这些解决方案都不起作用。更重要的是,我试图理解为什么 R 认为分配 132.7 GB 对于如此小的连接操作是必要的。
Solution
After reading the comments posted by
@Jon Spring, @Sweep Dodo and @Gregor Thomas carefully, I realized the issue was a large number of duplicate keys in the chr column. I simply created new columns by pasting chr:start together for both tables so there would be a lot fewer duplicate entries. After this the inner_join
completes in a couple of seconds.
Issue
Running 64-bit R 4.1.2 on Windows 11.
I have two tables
Table 1:
chr | start | end |
---|---|---|
chr7 | 117120017 | 117120018 |
chr7 | 117120018 | 117120019 |
chr7 | 117120019 | 117120020 |
chr7 | 117120020 | 117120021 |
chr7 | 117120021 | 117120022 |
chr7 | 117120022 | 117120023 |
188700 rows x 3 columns
Table 2:
chr | starthg38 | endhg38 |
---|---|---|
chr7 | 117479963 | 117479964 |
chr7 | 117479964 | 117479965 |
chr7 | 117479965 | 117479966 |
chr7 | 117479966 | 117479967 |
chr7 | 117479967 | 117479968 |
chr7 | 117479968 | 117479969 |
188700 rows x 3 columns
I try performing simple inner join,
new_table <- inner_join(table1, table2, by = c("chr" = "chr"))
and get the following error
Error: cannot allocate vector of size 132.7 Gb
Based on solutions suggested here
R memory management / cannot allocate vector of size n Mb
I tried,
gc()
and
memory.size(max = TRUE)
but neither of these solutions worked. More importantly, I'm trying to understand why R thinks allocating 132.7 Gb is necessary for such a small join operation.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论