tm包错误"由于向量太大,无法将DocumentTermMatrix转换为普通矩阵"

Chr*_*ian 5 r tm

我创建了一个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
Run Code Online (Sandbox Code Playgroud)

由于某种原因,只要将对象转换为常规矩阵,对象的大小就会显着增加.我怎么能避免这个?

或者是否有另一种方法在DocumentTermMatrix上执行常规矩阵运算?

eng*_*yen 10

快速而肮脏的方法是将数据从Matrix等外部包导出到稀疏矩阵对象中.

> attributes(dtm)
$names
[1] "i"        "j"        "v"        "nrow"     "ncol"     "dimnames"

$class
[1] "DocumentTermMatrix"    "simple_triplet_matrix"

$Weighting
[1] "term frequency" "tf"            
Run Code Online (Sandbox Code Playgroud)

dtm对象具有i,j和v属性,这是documenttermmatrix的内部表示.使用:

library("Matrix") mat <- sparseMatrix(i=dtm$i, j=dtm$j, x=dtm$v,
   dims=c(dtm$nrow, dtm$ncol))
Run Code Online (Sandbox Code Playgroud)

你完成了

你的对象之间的天真比较:

> mat[1,1:100]
> head(as.vector(dtm[1,]), 100)
Run Code Online (Sandbox Code Playgroud)

将各自给出完全相同的输出.


Dav*_*aid 0

DocumentTermMatrix 使用稀疏矩阵表示,因此它不会占用存储所有这些零的所有内存。根据您想要做什么,您可能会幸运地使用SparseM包,它提供了一些使用稀疏矩阵的线性代数例程。