В РИ взяли QR-разложение разреженной матрицы с помощью удивительного пакета Matrix.Теперь я хочу знать (приблизительный) ранг этой матрицы.Как ни странно, хотя основание qr
не соответствует ранговому приближению, я не вижу его в пакете Matrix.Я думаю, что я должен сделать QR-код внутри Matrix::rankMatrix
.
Пример кода
require(Matrix)
X <- Diagonal(10) # rank should be 10
qrX <- Matrix::qr(X)
rankMatrix(qrX)
# Error in diff(sval) <= 0 :
# no method for coercing this S4 class to a vector
Конечно, я сам смог бы оценить ранг, но это действительно кажетсяСтранно, что я должен реализовать это сам.
rkfn <- function(qrX) {
d <- diag(qrR(qrX))
tol <- length(d) * .Machine$double.eps
sum(d > max(d) * tol)
}
rkfn(qrX)
# 10
Это основано на документации для Matrix::rankMatrix
, но я чувствую, что в Матрице должно быть что-то, что делает это для меня.