我遇到了试图在R中使用大对象的问题.例如:
> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there …Run Code Online (Sandbox Code Playgroud) 在矢量化一些模拟代码的过程中,我遇到了内存问题.我在Windows XP下使用32位R版本2.15.0(通过RStudio版本0.96.122).我的机器有3.46 GB的RAM.
> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] Matrix_1.0-6 lattice_0.20-6 MASS_7.3-18
loaded via a namespace (and not attached):
[1] grid_2.15.0 tools_2.15.0
Run Code Online (Sandbox Code Playgroud)
以下是问题的最小示例:
> memory.limit(3000)
[1] 3000
> rm(list = ls())
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1069761 28.6 1710298 45.7 1710298 45.7
Vcells …Run Code Online (Sandbox Code Playgroud) 我试图在一个非常大的矩阵上做一些k-means聚类.
矩阵大约是500000行×4000个cols但非常稀疏(每行只有几个"1"值).
整件事不适合内存,因此我将其转换为稀疏的ARFF文件.但是R显然无法读取稀疏的ARFF文件格式.我还将数据作为普通的CSV文件.
R中是否有可用于有效加载此类稀疏矩阵的包?然后,我将使用群集包中的常规k-means算法继续.
非常感谢
我有一个由70,000个数值组成的数据集,表示从0到50的距离,我想聚集这些数字; 然而,如果我正在尝试经典的聚类方法,那么我将不得不建立一个70,000X70,000距离矩阵,表示我的数据集中每两个数字之间的距离,这将不适合内存,所以我想知道是否有是否有任何聪明的方法来解决这个问题,而无需进行分层抽样?我还尝试过R中的bigmemory和大分析库,但仍然无法将数据放入内存中