无法分配的向量在 R 中执行 inner_join 时大小 Gb

发布于 2025-01-09 00:25:39 字数 3050 浏览 0 评论 0原文

解决方案

阅读了以下人发表的评论后 @Jon Spring、@Sweep Dodo 和 @Gregor Thomas 仔细一看,我意识到问题是 chr 列中存在大量重复键。我只是通过将两个表的 chr:start 粘贴在一起来创建新列,这样重复条目就会少得多。此后,inner_join 将在几秒钟内完成。

问题

在 Windows 11 上运行 64 位 R 4.1.2。

我有两个表表

1:

chrstartend
chr7117120017117120018
chr7117120018117120019
chr7117120019117120020
chr7117120020117120021
chr7117120021117120022
chr7117120022117120023

188700 行 x 3 列

表 2:

chrstarthg38endhg38
chr7117479963117479964
CHR7117479964117479965
CHR7117479965117479966
CHR7117479966117479967
CHR7117479967117479968
CHR7117479968117479969

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:

chrstartend
chr7117120017117120018
chr7117120018117120019
chr7117120019117120020
chr7117120020117120021
chr7117120021117120022
chr7117120022117120023

188700 rows x 3 columns

Table 2:

chrstarthg38endhg38
chr7117479963117479964
chr7117479964117479965
chr7117479965117479966
chr7117479966117479967
chr7117479967117479968
chr7117479968117479969

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文