计算26000行和5列数据表的距离矩阵会导致内存错误

时间:2015-10-22 18:46:21

标签: r data.table

我正在尝试使用不太大且只有数字数据的数据表进行层次聚类。

> dim(user_info_scaled)
[1] 26497     5
> d = dist(user_info_scaled)
Error: cannot allocate vector of size 2.6 Gb

我也有这个信息:

> tables()
     NAME                 NROW NCOL MB COLS                                                                             KEY
[1,] user_info         149,676   35 66 V1,run,endo.x,V1.x,_id.x,country,gender,weight,height,temperature.x,humidity.x,w                        
[2,] user_info_scaled   26,497    5  2 height,weight,ascent.x,duration.x,hour_start_per_run   

为什么我收到此错误?我知道距离矩阵是n平方,但我仍然没有看到如何让我得到2.6 Gig矢量。我错过了什么?

1 个答案:

答案 0 :(得分:2)

这样的R对象将占用大约2.5Gb的RAM。以下是我在带有64Gb RAM的Linux机器上使用的内容。

> obj2 <- dist(matrix(rnorm(26000 * 5), ncol = 5))
> print(object.size(obj2), units = "Gb")
2.5 Gb

它不存储n整个n对象(需要~5Gb的RAM),只是矩阵的下三角形,因此存在差异。每个元素使用8个字节的IIRC,你将存储337 百万个

就R而言,这只是物体的大小;您可能需要更多RAM来创建它。该错误表明R在使用dist()的操作中的某个时刻请求了2.6Gb 更多 RAM,并且这不能由操作系统分配