我正在尝试使用不太大且只有数字数据的数据表进行层次聚类。
> 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矢量。我错过了什么?
答案 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,并且这不能由操作系统分配