我创建了一个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/

10-12 19:55