当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R fastMisc “低级”强制和方法


R语言 fastMisc 位于 Matrix 包(package)。

说明

Matrix 内部使用的 “Semi-API” 函数通常用于绕过 S4 调度并避免相关的开销。这些被导出以便为专家用户提供此函数。典型用户应继续依赖 S4 通用函数来调度合适的方法,例如调用 as(., <class>) 进行强制转换。

用法

.M2kind(from, kind = ".", sparse = NA)

.M2gen(from, kind = ".")
.M2sym(from, ...)
.M2tri(from, ...)
.M2diag(from)

.M2v(from)
.M2m(from)
.M2unpacked(from)
.M2packed(from)
.M2C(from)
.M2R(from)
.M2T(from)

.sparse2dense(from, packed = FALSE)
.diag2dense(from, shape = "t", packed = FALSE, uplo = "U")
.ind2dense(from, kind = "n")
.m2dense(from, class, uplo = "U", diag = "N")

.dense2sparse(from, repr = "C")
.diag2sparse(from, shape = "t", repr = "C", uplo = "U")
.ind2sparse(from, kind = "n", repr = ".")
.m2sparse(from, class, uplo = "U", diag = "N")

.tCRT(x, lazy = TRUE)

.diag.dsC(x, Chx = Cholesky(x, LDL = TRUE), res.kind = "diag")

.solve.dgC.lu  (a, b, tol = .Machine$double.eps, check = TRUE)
.solve.dgC.qr  (a, b, order = 3L, check = TRUE)
.solve.dgC.chol(a, b, check = TRUE)

.updateCHMfactor(object, parent, mult = 0)

参数

from , x , a , b

Matrix 、矩阵或向量。

kind

指定结果的 “kind” 的字符串( ".""n""l""d" )。 "." 表示应该保留from 的类型。 "n" 指示结果应继承自nMatrix(依此类推)。

shape

指定结果的 “shape” 的字符串( ".""g""s""t" )。 "." 表示应保留from 的形状。 "g" 指示结果应继承自generalMatrix(依此类推)。

repr

一个字符串( ".""C""R""T" )指定结果的稀疏表示。 "." 仅被 .ind2sparse 接受,并表示最有效的表示形式,即 margin = 2 ( 1 ) 的 "C" ( "R" )。 "C" 指示结果应继承自CsparseMatrix(依此类推)。

packed

指示结果是否应从 packedMatrix 继承而不是从 unpackedMatrix 继承的逻辑。对于继承自 generalMatrixfrom ,它会被忽略。

sparse

指示结果是否应从 sparseMatrix 继承而不是从 denseMatrix 继承的逻辑。如果是 NA ,那么当且仅当 from 是时,结果才会是形式稀疏的。

uplo

一个字符串( "U""L" ),指示结果(如果对称或三角形)是否应存储 from 的上三角形或下三角形。对边三角形中from 的元素将被忽略。

diag

一个字符串( "N""U" ),指示结果(如果是三角形)形式上应为非单位三角形还是单位三角形。在单位三角形的情况下,from 的对角线元素被忽略。

class

一个字符串,其前三个字符指定结果的类。它应与 .m2dense 的模式 "^[.nld](ge|sy|tr|sp|tp)".m2sparse"^[.nld][gst][CRT]" 匹配,其中第一个位置的 "." 相当于逻辑参数的 "l" 和数字参数的 "d"

...

传递给 isSymmetricisTriangular 的可选参数。

lazy

一个逻辑,指示是否应使用最小分配来构造转置,但可能不保留表示。

Chx

可选地,xCholesky(x, ...) 分解。如果提供,则 x 未使用。

res.kind

中的一个字符串c("trace", "sumLog", "prod", "min", "max", "range", "diag", "diagBack").

tol

请参阅lu-methods

order

请参阅qr-methods

check

一个逻辑,指示是否应测试第一个参数是否从 dgCMatrix 继承,并在必要时进行强制转换。仅当已知已从 dgCMatrix 继承时,才设置为 FALSE 以提高速度。

object

从虚拟类 CHMfactor 继承的 Cholesky 分解,几乎总是调用泛型函数 Cholesky 的结果。

parent

dsCMatrix 或类 dgCMatrix 的对象。

mult

正长度的数值向量。仅使用第一个元素,并且该元素必须是有限的。

细节

名称格式为 .<A>2<B> 的函数实现从虚拟类 A 到虚拟类 B 的 “nearest” 非虚拟子类的强制转换,其中虚拟类缩写如下:

M

Matrix

m

矩阵或向量

v

向量

dense

denseMatrix

unpacked

unpackedMatrix

packed

packedMatrix

sparse

CsparseMatrixRsparseMatrixTsparseMatrix

C

CsparseMatrix

R

RsparseMatrix

T

TsparseMatrix

gen

generalMatrix

sym

symmetricMatrix

tri

triangularMatrix

diag

diagonalMatrix

ind

indMatrix

缩写应被视为指南,而不是行为的准确说明。例如,.m2dense.m2sparse 除了矩阵之外还接受向量。

.tCRT(x)

如果lazy = TRUE, 然后.tCRT构造转置x使用最有效的表示,这对于‘⁠CRT⁠' 是 '⁠随机对照试验⁠’。如果lazy = FALSE, 然后.tCRT保留了表示x,表现为泛型函数的相应方法t.

.diag.dsC(x)

.diag.dsCx 的 Cholesky 分解计算为 (如果提供了 Chx,则使用),以便根据 的对角线条目计算几个可能的统计数据之一。请参阅“参数”下的res.kind

.solve.dgC.*(a, b)

.solve.dgC.lu(a, b) 需要方阵 a.solve.dgC.qr(a, b) 需要一个 “long” 矩阵 anrow(a) >= ncol(a).solve.dgC.chol(a, b) 需要 “wide” 矩阵 anrow(a) <= ncol(a)

所有这三个都可以用来直接求解稀疏线性系统。仅.solve.dgC.qr.solve.dgC.chol 可用于解决稀疏最小二乘问题。

.updateCHMfactor(object, parent, mult)

.updateCHMfactor 使用 Cholesky 分解 F(parent) + mult[1] * diag(nrow(parent)) 的结果更新 object,即 F(parent) 加上 mult[1] 乘以单位矩阵,其中 F = identity 如果 parentdsCMatrixF = tcrossprod如果parentdgCMatrix 。如果 object = Cholesky(S, ...) ,则 F(parent) 的非零模式必须与 S 的非零模式匹配。

例子


D. <- diag(x = c(1, 1, 2, 3, 5, 8))
D.0 <- Diagonal(x = c(0, 0, 0, 3, 5, 8))
S. <- toeplitz(as.double(1:6))
C. <- new("dgCMatrix", Dim = c(3L, 4L),
          p = c(0L, 1L, 1L, 1L, 3L), i = c(1L, 0L, 2L), x = c(-8, 2, 3))

stopifnot(exprs = {
    identical(.M2tri (D.), as(D., "triangularMatrix"))
    identical(.M2sym (D.), as(D.,  "symmetricMatrix"))
    identical(.M2diag(D.), as(D.,   "diagonalMatrix"))
    identical(.M2kind(C., "l"),
              as(C., "lMatrix"))
    identical(.M2kind(.sparse2dense(C.), "l"),
              as(as(C., "denseMatrix"), "lMatrix"))
    identical(.diag2sparse(D.0, "t", "C"),
              .dense2sparse(.diag2dense(D.0, "t", TRUE), "C"))
    identical(.M2gen(.diag2dense(D.0, "s", FALSE)),
              .sparse2dense(.M2gen(.diag2sparse(D.0, "s", "T"))))
    identical(S.,
              .M2m(.m2sparse(S., ".sR")))
    identical(S. * lower.tri(S.) + diag(1, 6L),
              .M2m(.m2dense (S., ".tr", "L", "U")))
    identical(.M2R(C.), .M2R(.M2T(C.)))
    identical(.tCRT(C.), .M2R(t(C.)))
})

A <- tcrossprod(C.)/6 + Diagonal(3, 1/3); A[1,2] <- 3; A
stopifnot(exprs = {
    is.numeric( x. <- c(2.2, 0, -1.2) )
    all.equal(x., .solve.dgC.lu(A, c(1,0,0), check=FALSE))
    all.equal(x., .solve.dgC.qr(A, c(1,0,0), check=FALSE))
})

## Solving sparse least squares:

X <- rbind(A, Diagonal(3)) # design matrix X (for L.S.)
Xt <- t(X)                 # *transposed*  X (for L.S.)
(y <- drop(crossprod(Xt, 1:3)) + c(-1,1)/1000) # small rand.err.
str(solveCh <- .solve.dgC.chol(Xt, y, check=FALSE)) # Xt *is* dgC..
stopifnot(exprs = {
    all.equal(solveCh$coef, 1:3, tol = 1e-3)# rel.err ~ 1e-4
    all.equal(solveCh$coef, drop(solve(tcrossprod(Xt), Xt %*% y)))
    all.equal(solveCh$coef, .solve.dgC.qr(X, y, check=FALSE))
})

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 “Low Level” Coercions and Methods。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。