【发布时间】:2013-08-10 02:27:10
【问题描述】:
这可能看起来像一个无害的简单问题,但执行起来需要很长时间。任何关于加速或矢量化等的想法将不胜感激。
我有一个包含 500 万行和 50 列的 R 数据框:OriginalDataFrame
来自该帧的索引列表:IndexList(55000 [numIndex] 唯一索引)
它是一个时间序列,因此 55K 唯一索引有大约 500 万行。
OriginalDataFrame 已由dataIndex 订购。 IndexList 中的所有索引都不存在于OriginalDataFrame 中。任务是找到存在的索引,并构造一个新的数据框:FinalDataFrame
目前我正在使用library(foreach) 运行此代码:
FinalDataFrame <- foreach (i=1:numIndex, .combine="rbind") %dopar% {
OriginalDataFrame[(OriginalDataFrame$dataIndex == IndexList[i]),]
}
我在具有 24 个内核和 128GB RAM 的机器上运行此程序,但这需要大约 6 个小时才能完成。
我是在做一些非常愚蠢的事情还是在 R 中有更好的方法来做到这一点?
【问题讨论】:
-
您在寻找
OriginalDataFrame[OriginalDataFrame$dataIndex %in% unlist(IndexList)),]吗? -
见stackoverflow.com/questions/1727772/… 或者在RCpp中写下你需要性能的部分
-
您好 Roland,感谢您的回答。您的解决方案是我第一次尝试没有并行化。使用该代码完成此操作需要 26 多个小时。之后我使用了多核版本。
-
@Maximus:谢谢你的建议。我试图先探索 R 中的矢量化操作,而不求助于 Cpp。不幸的是,我们的 R 在 Windows 上运行,我无法使用可用于 Linux 版本 R 的 GPU 包。
标签: r search parallel-processing dataframe