在R中将简单三元组矩阵(SLAM)转换为稀疏矩阵(Matrix)

11

在slam包或Matrix包中是否存在将稀疏矩阵从简单的三元组形式(来自slam包)转换为dgTMatrix/dgCMatrix形式(来自Matrix包)的内置函数?

还有一种内置方式可以访问简单三元组矩阵中的非零条目吗?

我正在使用R进行工作。


3
你不太可能得到那种问题的很多帮助。提供一个可重现你情况的例子会很有帮助,至少要展示一些你已经尝试过的代码。 - Chargaff
6
这个问题不需要提供可重现的例子。无论数据内容如何,简单三元组矩阵都是简单三元组矩阵。我问这个问题是为了寻找是否有内置函数可以支持两种格式之间的转换。我并不要求提供我自己能写的临时代码。 - GorillaInR
不,似乎没有内置函数可以在Matrix和slam包生成的稀疏矩阵之间进行转换。 - Chargaff
2个回答

23

实际上,有一种内置的方法:

simple_triplet_matrix_sparse <-  sparseMatrix(i=simple_triplet_matrix_sparse$i, j=simple_triplet_matrix_sparse$j, x=simple_triplet_matrix_sparse$v,
           dims=c(simple_triplet_matrix_sparse$nrow, simple_triplet_matrix_sparse$ncol))

从我的经验来看,使用这个技巧可以帮我节省大量的时间和痛苦,以及避免在使用tm包进行大规模文本挖掘时出现计算机崩溃的情况。这个问题不需要一个可重复的示例。无论三元组矩阵中包含什么数据,它都是一个简单的三元组矩阵。这个问题只是询问是否有内置函数可以支持两者之间的转换。


3
我不同意。通过提供可重现的例子,像你这样的是非问题将得到更具信息量的回答,而且回答会包含实用的示例。你看到多个答案的机会也会大大提高。 - Chargaff

3

轻微修改。sparseMatrix采用整数作为输入,而slam采用i、j作为因子,v可以是任何值。

as.sparseMatrix <- function(simple_triplet_matrix_sparse) {

  sparseMatrix(
    i = simple_triplet_matrix_sparse$i,
    j = simple_triplet_matrix_sparse$j,
    x = simple_triplet_matrix_sparse$v,
    dims = c(
      simple_triplet_matrix_sparse$nrow, 
      simple_triplet_matrix_sparse$ncol
      ),
    dimnames = dimnames(simple_triplet_matrix_sparse)
  )

}

slam:: 包截至2020年不会将索引存储为因子,因此不需要调用 as.numeric()。否则,这是一个很好的函数。 - Gabriel J. Odom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接