我正在寻找一种从更大的表中提取大量行的快速方法。我的表格的顶部如下:

> head(dbsnp)

      snp      gene distance
rs5   rs5     KRIT1        1
rs6   rs6   CYP51A1        1
rs7   rs7 LOC401387        1
rs8   rs8      CDK6        1
rs9   rs9      CDK6        1
rs10 rs10      CDK6        1


以及尺寸:

> dim(dbsnp)
[1] 11934948        3


我想选择列表中包含行名的行:

> head(features)
[1] "rs1367830" "rs5915027" "rs2060113" "rs1594503" "rs1116848" "rs1835693"

> length(features)
[1] 915635


毫不奇怪,执行此temptable = dbsnp[features,]的直接方法需要相当长的时间。

我一直在研究通过R中的sqldf软件包执行此操作的方法。我认为这样做可能会更快。不幸的是,我不知道如何在SQL中选择具有某些行名的行。

谢谢。

最佳答案

大多数人最初尝试的方式是:

dbsnp[ rownames(dbsnp) %in% features, ]  # which is probably slower than your code


因为您说这要花很长时间,所以我怀疑您已经超出了RAM容量并开始使用虚拟内存。您应该关闭系统,然后仅使用R作为正在运行的应用程序重新启动,并查看是否可以避免“虚拟化”。

08-19 22:13