我在R中有一个sparseMatrix,在Matrix包中实现。我想对非零条目的列号执行一些操作。根据它的存储和打印方式,似乎应该有一个简单的功能来做到这一点,但我在文档中找不到一个。作为玩具示例,f(Matrix,Int)是我想要的功能,
M <- Matrix(c(1,0,0,1,0,1,0,0), nrow = 2)
# 1 0 0 1
# 0 1 0 0
f(M,1) = [1,4]
f(M,2) = [2]
因此,给定一个矩阵和行号,我们得到一个非零值索引列表。 注意:我不想迭代数据集的所有列(它们有数百万个),我想要一些方法来了解sparseMatrix如何存储在内存中或内置有效转换为List of列表或坐标列表表单。
答案 0 :(得分:1)
您可以尝试:
with(summary(M), j[i == 1])
# [1] 1 4
with(summary(M), j[i == 2])
# [1] 2
将其包装为函数,假设M
已经是sparseMatrix
:
f <- function(M, row) with(summary(M), j[i==row])
f(M, 1)
# [1] 1 4
f(M, 2)
# [1] 2
答案 1 :(得分:0)
你试过str(M)
吗?它会显示矩阵实际上保存数据。
默认情况下,它以列主格式存储 - dgCMatrix
。但您可以使用as()
函数将其转换为三元组(坐标列表)和行主格式。
M_triplet = as(M, 'TsparseMatrix')
M_row = as(M, 'RsparseMatrix')
然后,您可以按元素执行所有操作,并将其转换回dgCMatrix
(几乎所有Matrix
方法都是原生的)。