1

我有一个非常大的 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 函数。

谢谢你的帮助!

4

1 回答 1

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 向量当前长度限制的样本?

于 2012-09-12T08:03:34.857 回答