将稀疏距离的CSV转换为Dist对象R的有效方法

时间:2012-09-11 23:19:23

标签: r distance sparse-matrix

我有一个非常大的csv文件(大约9100万行,因此for循环在R中需要太长时间)关键字之间的相似性(大约50,000个唯一关键字)当我读入data.frame时看起来像:

> df   
kwd1 kwd2 similarity  
a  b  1  
b  a  1  
c  a  2  
a  c  2 

这是一个稀疏列表,我可以使用sparseMatrix()将其转换为稀疏矩阵:

> myMatrix 
  a b c  
a . 1 2
b 1 . .
c 2 . .

但是,现在我想将其转换为dist对象。我试过as.dist(myMatrix),但我得到的错误是'问题对于as.dist()来说太大了。我还尝试使用myMatrix = myMatrix * lower.tri(myMatrix)将稀疏矩阵转换为下三角稀疏矩阵然后转换为dist对象(认为这可能更好),但我有相同的错误但是关于较低的.tri功能。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

"dist"的对象是密集对象。要从稀疏表示开始,将需要一个

的矢量
R> 0.5*(91000000*90999999)
[1] 4.1405e+15

元素(给对角线)。在R中,向量的最大长度是2 ^ 31-1:

R> 2^31 - 1
[1] 2147483647

小于存储密集"dist"对象所需的元素数量,因此不可能,这就是dist()错误的原因。出于类似的原因,您将无法将数据的下三角形版本存储为密集对象,因为它也被保存为具有相同长度限制的向量。

此时我认为您需要更多地解释实际问题以及您想要的相异对象(在另一个问题中)!您是否需要9100万个对象之间的所有不同之处,或者您是否可以通过此示例获得适合R的向量的当前长度限制的样本?