我正尝试在一组非常大的距离上执行 fastclust,但遇到了问题。
我有一个非常大的 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 . . .
b 1 . .
c 2 . .
但是,当我尝试使用 as.dist() 将其转换为 dist 对象时,我从 R 中收到“问题太大”的错误消息。我已经阅读了此处的其他 dist 问题,但是代码其他人建议不适用于我上面的示例数据集。
感谢您的帮助!
最佳答案
虽然一开始使用稀疏矩阵似乎是个好主意,但我认为这种方法存在一些问题:您丢失的距离将被编码为 0
,而不是NA
(参见 Creating (and Accessing) a Sparse Matrix with NA default entries)。如您所知,在聚类时,零差异与缺失差异具有完全不同的含义...
所以无论如何,您需要的是一个带有大量 NA
的 dist 对象,用于您缺少的差异。不幸的是,您的问题太大,需要太多内存:
d <- dist(x = rep(NA_integer_, 50000))
# Error: cannot allocate vector of size 9.3 Gb
而且这只是处理输入...即使使用具有大量内存的 64 位机器,我也不确定聚类算法本身是否会阻塞或无限期地运行。
您应该考虑将您的问题分解成更小的部分。
关于r - 层次聚类大稀疏距离矩阵R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12393466/