我正在阅读R中Matrix包的说明。但是我无法理解函数中的p
参数:
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
用于行或列索引的压缩表示,因为让i
或j
中的多个元素具有相同的值来表示单个元素是浪费的行列。但是,当我尝试提供的示例时,我仍然无法弄清楚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)
答案 0 :(得分:2)
只需在?SparseMatrix
中稍微阅读一下即可了解如何解释p
。 (特别要注意p
的“扩展形式”。
如果缺少'i'或'j',则'p'必须是非递减整数 第一个元素为零的向量。它提供压缩, 或“指针”表示行或列索引, 哪个缺失。 'p'的扩展形式, 'rep(seq_along(dp),dp)'其中'dp&lt; - 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