2012-02-14 66 views
0

我有一大堆10,000个长度为100的矢量存储在一个矩阵中,我想要计算所有组之间的相关性。不幸的是,在我目前的计算机上做一个简单的双重循环来产生相关性是永远的!有没有更有效的方法可以解决这个问题?如何使用apply而不是for循环计算大数据集的所有成员之间的所有cor()?

我想我有一个像应用函数的想法,但我不知道如何实现它与cor()。

+0

万将与每100个载体?或10,000个长度为100的矢量?或者是一个10000个元素的列表,其中每个元素是一个长度为100的向量。str(yourdata)是什么样子的? – 2012-02-14 20:45:42

+0

澄清:第二个:10,000个长度为100的载体。 $ name1:num 15.3 14.9 15.1 15.1 15.3 ... $ name2:num 15.5 15.2 15.6 15.4 14.3 ... – user794479 2012-02-14 21:06:24

+0

注释1:'cor'解决方案,on一个矩阵是正确的选择,但是如果您计算的是10K x 10K的相关性,那就是100M条目, 800MB的浮点值。只要确定你没有用完内存并交换(旧机器上的问题)。在我的笔记本电脑上,单线程10Kx10K相关矩阵的计算时间约为23秒。 100x100矩阵是0.15秒。 – Iterator 2012-02-14 23:11:06

回答

5

将数据放入数据框或矩阵并使用内置的cor()函数。一般情况下,要避免使用循环中R.

cor(yourData)

+0

这就是我已经做过的事情,但我不确定是否有更好的方式来以某种方式在矩阵的不同部分上运行多个R实例。 – user794479 2012-02-14 21:07:41

+0

如果您使用多线程BLAS库,那么它应该在多个内核上运行。 – Iterator 2012-02-14 21:10:37

+0

这工作相当完美;我想调用每个成对比较10k向量的cor函数是一个非常糟糕的主意。我估计需要花费5个小时,花了我10秒。感谢David和Iterator的答复和评论。 – user794479 2012-02-14 23:52:22

相关问题