R:通过两个Quanteda DFM稀疏矩阵的矩阵乘积来初始化空dgCMatrix? [英] R: initialise empty dgCMatrix given by matrix multiplication of two Quanteda DFM sparse matrices?

查看:505
本文介绍了R:通过两个Quanteda DFM稀疏矩阵的矩阵乘积来初始化空dgCMatrix?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的for循环,试图在此处实施解决方案,并使用虚拟变量,例如

I have for loop like this, trying to implement the solution here, with dummy vars such that

aaa <- DFM %*% t(DFM)   #DFM is Quanteda dfm-sparse-matrix
for(i in 1:nrow(aaa)) aaa[i,] <- aaa[i,][order(aaa[i,], decreasing = TRUE)]

但现在

for(i in 1:nrow(mmm)) mmm[i,] <- aaa[i,][order(aaa[i,], decreasing = TRUE)]

其中mmm尚不存在,目标是做与mmm <- t(apply(a, 1, sort, decreasing = TRUE))相同的事情.但是现在在for循环之前,我需要初始化mmm,否则要初始化Error: object 'mmm' not found. aaammm的类型是dgCMatrix,由两个Quanteda

where mmm does not exist yet, the goal is to do the same thing as mmm <- t(apply(a, 1, sort, decreasing = TRUE)). But now before the for loop I need to initialise the mmm otherwise Error: object 'mmm' not found. The type of aaa and mmm is dgCMatrix given by the matrix multiplication of two Quanteda DFM matrices.

结构

aaaFunc由矩阵乘法DFM %*% t(DFM)给出,其中DFM是Quanteda稀疏dfm矩阵.这样的结构是

aaaFunc is given by the matrix multiplication DFM %*% t(DFM) where DFM is the Quanteda Sparse dfm-matrix. The structure is such that

> str(aaaFunc)
Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int [1:39052309] 0 2 1 0 2 2616 2880 3 4 5 ...
  ..@ p       : int [1:38162] 0 2 3 7 8 10 13 15 16 96 ...
  ..@ Dim     : int [1:2] 38161 38161
  ..@ Dimnames:List of 2
  .. ..$ : chr [1:38161] "90120000" "90120000" "90120000" "86140000" ...
  .. ..$ : chr [1:38161] "90120000" "90120000" "90120000" "86140000" ...
  ..@ x       : num [1:39052309] 1 1 1 1 2 1 1 1 2 1 ...
  ..@ factors : list()

使用

ERRORS on the DFM with the methods mentioned here on general question on replicating a R object without its content but its structure/etc.

A.错误,出现aaaFunc.mt[]<- NA

> aaaFunc.mt <- aaaFunc[0,]; aaaFunc.mt[] <- NA; aaaFunc.mt[1,]
Error in intI(i, n = x@Dim[1], dn[[1]], give.dn = FALSE) : index larger than maximal 0

B.错误,出现mySparseMatrix.mt[nrow(mySparseMatrix),]<-

> aaaFunc.mt <- aaaFunc[0,]; aaaFunc.mt[nrow(aaaFunc),] <- NA
Error in intI(i, n = di[margin], dn = dn[[margin]], give.dn = FALSE) : 
  index larger than maximal 0

C.错误,显示replace(...,NA)

Browse[2]> mmmFunc <- replace(aaaFunc,NA);
Error in replace(aaaFunc, NA) : 
  argument "values" is missing, with no default
Browse[2]> mmmFunc <- replace(aaaFunc,,NA);
Error in `[<-`(`*tmp*`, list, value = NA) : 
  argument "list" is missing, with no default
Browse[2]> mmmFunc <- replace(aaaFunc,c(),NA);
Error in .local(x, i, j, ..., value) : 
  not-yet-implemented 'Matrix[<-' method

如何初始化由两个Quanteda DFM矩阵的矩阵乘法给出的空dgCMatrix?

推荐答案

以下内容将初始化一个空的稀疏矩阵或重置一个现有的稀疏矩阵,同时保留维度和dimnames

The following will either initialize an empty sparse matrix or reset an existing sparse matrix while preserving both the dimensions and dimnames

library(Matrix)

i <- c(1,3:8)
j <- c(2,9,6:10)
x <- 7 * (1:7)
A <- sparseMatrix(i, j, x = x)
rownames(A) <- letters[seq_len(nrow(A))]

A2 <- sparseMatrix(i = integer(0), j = integer(0), dim = A@Dim, dimnames = A@Dimnames)

A@i <- integer(0)
A@p[] <- 0L
A@x <- numeric(0)

setequal(A, A2)
[1] TRUE

这篇关于R:通过两个Quanteda DFM稀疏矩阵的矩阵乘积来初始化空dgCMatrix?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆