2013-11-15 219 views
3

我讀通過R.矩陣封裝的指示,但我無法理解函數的參數p[R構建稀疏矩陣

sparseMatrix(i = ep, j = ep, p, x, dims, dimnames, 
     symmetric = FALSE, index1 = TRUE, 
     giveCsparse = TRUE, check = TRUE) 

根據http://stat.ethz.ch/R-manual/R-devel/library/Matrix/html/sparseMatrix.html

號碼:
指向列的每個列(或行)的數值(整數值)向量指向列(或行)中元素的初始(從零開始)的索引 。 i,j或p 中的一個必須缺失。

我計算p爲任一的行或列指數的壓縮表示,因爲它是浪費的具有在任一ij多個元素具有相同的值來表示單個行/列。但是,當我嘗試提供的示例中,我仍然無法弄清楚如何p是控制它的x元素進入到行/列

dn <- list(LETTERS[1:3], letters[1:5]) 
## pointer vectors can be used, and the (i,x) slots are sorted if necessary: 
m <- sparseMatrix(i = c(3,1, 3:2, 2:1), p= c(0:2, 4,4,6), x = 1:6, dimnames = dn) 

回答

2

剛看了一點在?SparseMatrix越往下學習如何p解釋。 (具體地,注意有關的p的「展開的形式」的位。)

如果「i」的或「J」缺少然後「P」必須是一個非遞減整數 向量,其第一個元素是零。它提供了行或列索引 的壓縮, 或「指針」表示,無論哪個丟失。使用'p'的擴展形式 'rep(seq_along(dp),dp)',其中'dp < -diff(p)'被用作基於1的行或列索引 。

這裏是一個小功能,這將有助於你看到什麼,在實踐中意味着:

pex <- function(p) { 
    dp <- diff(p) 
    rep(seq_along(dp), dp) 
} 

## Play around with the function to discover the indices encoded by p. 
pex(p = c(0,1,2,3)) 
# [1] 1 2 3 

pex(p = c(0,0,1,2,3)) 
# [1] 2 3 4 

pex(p = c(10,11,12,13)) 
# [1] 1 2 3 

pex(p = c(0,0,2,5)) 
# [1] 2 2 3 3 3 

pex(p = c(0,1,3,3,3,3,8)) 
# [1] 1 2 2 6 6 6 6 6 
+0

謝謝,現在弄明白了。因此,p中第i個元素的值表示已經包含在第(i-1)列中的x個元素的數量。換句話說,p中第i個元素和第(i-1)個元素之間的差異是(i-1)列中的x個元素的數量 – GorillaInR

+0

@GorillaInR - 是的。嚴格地說,你評論中倒數第二句話是不準確的,但最後一句是。所以,看起來你已經掌握了它。 –

+0

- 如果最終陳述是真實的,則倒數第二個陳述也將是真實的:每個差異是相應列中x個元素的數量,則第一個(i-1)差異的總和= x個元素的總數已經包含在第一個(i-1)列中= p的第i個元素的值 – GorillaInR