我有一个非常大的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功能。
感谢您的帮助!
答案 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的向量的当前长度限制的样本?