2013-11-15 7 views
3

Я читаю через инструкции пакета Matrix в 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 для сжатого представления либо строк или столбцов индексов, потому что это расточительно иметь несколько элементов в любом 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) 

ответ

2

Просто читать немного дальше вниз в ?SparseMatrix, чтобы узнать, как p интерпретируется , (В частности, обратите внимание на немного о «расширенной форме» p.)

Если «я» или «J» отсутствует, то «р» должен быть не убывает целое число вектора, первый элемент нуль. Он предоставляет сжатое, или «указатель» представление индексов строки или столбца, в зависимости от того, что отсутствует. Расширенная форма '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

Спасибо, получил его. Таким образом, значение i-го элемента в p представляет число элементов x, уже включенных в первый (i-1)-й столбец. Другими словами, различие между i-м и (i-1) -м элементом в p является число элементов x в столбце (i-1) – GorillaInR

+0

@GorillaInR - Да. Строго говоря, предпоследнее предложение в вашем комментарии неточно, но последнее предложение. Так что да, похоже, что у тебя это есть. –

+0

- Если конечная инструкция верна, то предпоследнее утверждение также будет истинным: каждое различие представляет собой число элементов x в соответствующем столбце, тогда сумма первых (i-1) разностей = общее число x элементов уже включены в первые (i-1) столбцы = значение i-го элемента p – GorillaInR

Смежные вопросы