2013-11-15 222 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