2016-07-15 26 views
1

我在矩陣包中實現了R中的sparseMatrix。我想對非零條目的列號執行一些操作。根據它的存儲和打印方式,似乎應該有一個簡單的功能來做到這一點,但我無法在文檔中找到它。作爲一個玩具例子,其中f(矩陣,智力)是我想要的功能,R - 獲取稀疏矩陣的座標或列表表示列表

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存儲在內存中或內置高效轉換爲列表列表或座標列表表單。

回答

1

你才能嘗試:

with(summary(M), j[i == 1]) 
# [1] 1 4 

with(summary(M), j[i == 2]) 
# [1] 2 

把它包裝成一個功能,假設MsparseMatrix已經:

f <- function(M, row) with(summary(M), j[i==row]) 
f(M, 1) 
# [1] 1 4 
f(M, 2) 
# [1] 2 
0

你嘗試str(M)?它會顯示矩陣實際上保留數據。 默認情況下,它以列主格式存儲 - dgCMatrix。但您可以使用as()函數將其轉換爲三元組(座標列表)和行優先格式。

M_triplet = as(M, 'TsparseMatrix') 
M_row = as(M, 'RsparseMatrix') 

然後你就可以按元素執行所有您的操作,並將其轉換回dgCMatrix(這是原產於幾乎所有Matrix方法)。

+0

我用str()這是我知道它被存儲在我想要的形式。稍後我會嘗試這種方法,看看哪個更好。 – user3910792