【发布时间】:2021-04-25 22:18:35
【问题描述】:
我需要帮助。
我的脚本适用于许多数据帧,即使这需要几个小时(在集群上:> 100 GB 内存)。对于一些大型数据帧(> 300 万行),即使运行两天后,for 循环也不起作用。 因此,如果有办法加快 for 循环或用 R 中更多的加速器函数替换脚本,我需要帮助。
这是对我的脚本/数据的简短描述:
snp1 <- c("R0100004", "R0100009", "R0100044", "R0100061", "R0100066","R0100067") # 3 million SNPs
snp2 <- c("R0100039", "R0100152", "R0100066", "R0100067", "R0100068", "R0100082") # 3 million SNPs
blocks <- c("R0100004|R0100009|R0100190|R0100015|R0100016|R0100017|R0100018|R0100021|R0100022|R0100024|R0100025",
"R0100039|R0100038|R0100037|R0100036|R0100043|R0100044",
"R0100220|R0100052|R0100053|R0100054|R0100055|R0100057|R0100058|R0100059",
"R0100061|R0100066|R0100067",
"R0100068|R0100069|R0100071|R0100072|R0100073|R0100074|R0133440|R0100076|R0100077|R0100078",
"R0100079|R0100081|R0100082") # 50000 haplotype block: each block contain > 2 SNPs. The SNP could be in 2 or more blocks.
# THE OBJECTIVE: For each SNP (snp1 and snp2) find his haplotype block
# This is my forloop
I <- length(snp1) # 3000000
res1 <- list()
res2 <- list()
for(j in 1:I){
myres1 <- list(grep(snp1[j], blocks, value=T))
myres2 <- list(grep(snp2[j], blocks, value=T))
res1[j] <- myres1
res2[j] <- myres2
}
for 循环适用于中等数据帧,但对于具有大行的数据帧则需要几天时间。 如何替换或加快这个 for 循环?
提前致谢。
【问题讨论】:
-
这可能是XY problem。你想回答/解决什么问题?
-
我正在尝试的是:对于每个 snp(snp1 和 snp2)从数据帧(块)中确定其块。
-
我的回答能达到你的要求吗?
-
@Jakub.Novotny 我得到 by` 不能包含 RHS 中缺少的连接列 blocks2 错误。你知道错误的来源吗?谢谢
-
没有线索。我刚刚在另一台计算机上运行了代码,它没有任何问题。
标签: r loops for-loop data.table