当ff矩阵内存分配不够时,在R中使用大数据集的相关矩阵

时间:2014-06-06 05:21:15

标签: r memory-management ff

我有一个简单的分析要做。我只需要计算列(或行,如果转置)的相关性。够简单吗?我无法获得整周的结果,我已经查看了大部分解决方案。

我的笔记本电脑有4GB内存。我有权访问具有32个节点的服务器。我的数据无法加载,因为它很大(411k列和100行)。如果您需要任何其他信息或部分数据,我可以尝试将其放在这里,但问题可以很容易地解释而无需查看数据。我只需要得到一个大小为411k X 411k的相关矩阵,这意味着我需要计算数据行之间的相关性。

我试图编写的概念:(所有这些都以某种方式给我内存问题或永远运行)

  1. 最简单的方法,对所有的一行,使用append.T写出结果。 (永远运行)
  2. biCorPar.r by bobthecat(https://gist.github.com/bobthecat/5024079),将数据拆分成块并使用ff矩阵。 (无法在我的服务器中使用ff()分配内存来分配corMAT矩阵)
  3. 将数据拆分成集合(每10000个连续行将是一个集合),并将每个集合与另一个集合相关(与bigcorPar相同的逻辑),但我无法找到将它们全部存储在一起的方法,最终生成最终411kX411k矩阵。
  4. 我正在尝试这个,bigcorPar.r在10000行对411k(因此10000被分成块)并将结果保存在单独的csv文件中。
  5. 我也试图在我的服务器的一个节点中运行每1000次vs 411k,今天是我的第3天,我仍然在第71行。
  6. 我不是R专业人士,所以我只能尝试这么多。要么我的代码永远运行,要么我没有足够的内存来存储结果。有没有更有效的方法来解决这个问题?

    感谢您的所有意见和帮助。

1 个答案:

答案 0 :(得分:1)

我在遗传研究的背景下熟悉这个问题。

如果您只对重要的相关性感兴趣,您可能会发现我的包MatrixEQTL很有用(可在CRAN上找到,更多信息请参见http://www.bios.unc.edu/research/genomic_software/Matrix_eQTL/)。

如果你想保留所有相关性,我首先要警告你,以二进制格式(与文本比较经济),需要411,000 x 411,000 x 8字节= 1.3 TB。如果这是您想要的,并且您可以使用所需的存储空间,我可以提供我的代码进行此类计算和存储。