我创建了一个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)
将各自给出完全相同的输出.