我创建了一个DocumentTermMatrix,其中包含1859个文档(行)和25722(列)。为了对该矩阵执行进一步的计算,我需要将其转换为常规矩阵。我想使用as.matrix()
命令。但是,它返回以下错误:无法分配大小为364.8 MB的向量。
> corp
A corpus with 1859 text documents
> mat<-DocumentTermMatrix(corp)
> dim(mat)
[1] 1859 25722
> is(mat)
[1] "DocumentTermMatrix"
> mat2<-as.matrix(mat)
Fehler: kann Vektor der Größe 364.8 MB nicht allozieren # cannot allocate vector of size 364.8 MB
> object.size(mat)
5502000 bytes
由于某种原因,无论何时将其转换为规则矩阵,对象的大小似乎都会急剧增加。如何避免这种情况?
还是有其他方法可以对DocumentTermMatrix执行常规矩阵运算?
最佳答案
快速而肮脏的方法是将数据从Matrix之类的外部包导出到稀疏矩阵对象中。
> attributes(dtm)
$names
[1] "i" "j" "v" "nrow" "ncol" "dimnames"
$class
[1] "DocumentTermMatrix" "simple_triplet_matrix"
$Weighting
[1] "term frequency" "tf"
dtm对象具有i,j和v属性,这是documenttermmatrix的内部表示形式。用:
library("Matrix") mat <- sparseMatrix(i=dtm$i, j=dtm$j, x=dtm$v,
dims=c(dtm$nrow, dtm$ncol))
到此为止。
您的对象之间的幼稚比较:
> mat[1,1:100]
> head(as.vector(dtm[1,]), 100)
每个都会给您完全相同的输出。
关于r - tm软件包错误 "Cannot convert DocumentTermMatrix into normal matrix since vector is too large",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7380133/