以下代码(特别是as.matrix
)仅在打开非常大的libsvm文件时失败。它适用于较小的文件
rawmforCluster=read.matrix.csr(filePath)
sparseforCluster=rawmforCluster$x
str(sparseforCluster)
sparseMatrixforCluster=as.matrix(sparseforCluster)
sparseforCluster
的结构是
Formal class 'matrix.csr' [package "SparseM"] with 4 slots
..@ ra : num [1:4860285] 1 1 2 1 1 1 1 1 1 1 ...
..@ ja : int [1:4860285] 77 668 716 1086 1202 1306 1527 2184 2545 2729 ...
..@ ia : int [1:659095] 1 18 25 26 31 36 52 59 67 72 ...
..@ dimension: int [1:2] 659094 3778
我得到的错误是
double(nrow * ncol)出错:向量大小不能为NA另外: 警告消息:在nrow * ncol中:整数溢出产生的NAs
问题 如何将数据强制转换为矩阵或(第二最好)data.table? (或者我应该寻求其他解决方案吗?)
更新 我发现标准解决方案是通过删除稀疏(低频)项来减小矩阵的大小。在我的情况下,这不是一个选项,因为一些低频项可能与某些子集高度相关。
我也读过有关bigmemory包的内容。但是,这似乎不适用于matrix.csr