Reconstruct the Q, R, or X Matrices from a QR Object

Returns the original matrix from which the object was constructed or the components of the decomposition.

algebra, array
qr.X(qr, complete = FALSE, ncol =) qr.Q(qr, complete = FALSE, Dvec =) qr.R(qr, complete = FALSE, ...)
object representing a QR decomposition. This will typically have come from a previous call to qr or lsfit.
logical expression of length 1. Indicates whether an arbitrary orthogonal completion of the $\bold{Q}$ or $\bold{X}$ matrices is to be made, or whether the $\bold{R}$ matrix is to be completed by binding zero-value rows beneath the square upper triangle.
integer in the range 1:nrow(qr$qr). The number of columns to be in the reconstructed $\bold{X}$. The default when complete is FALSE is the first min(ncol(X), nrow(X)) columns of the original $\bold{X}$ from which the qr object was constructed. The default when complete is TRUE is a square matrix with the original $\bold{X}$ in the first ncol(X) columns and an arbitrary orthogonal completion (unitary completion in the complex case) in the remaining columns.
vector (not matrix) of diagonal values. Each column of the returned $\bold{Q}$ will be multiplied by the corresponding diagonal value. Defaults to all 1s.
potentially further arguments, passed potentially to non-default methods.

qr.X returns $\bold{X}$, the original matrix from which the qr object was constructed, provided ncol(X) <= nrow(x)<="" code="">. If complete is TRUE or the argument ncol is greater than ncol(X), additional columns from an arbitrary orthogonal (unitary) completion of X are returned.qr.Q returns part or all of Q, the order-nrow(X) orthogonal (unitary) transformation represented by qr. If complete is TRUE, Q has nrow(X) columns. If complete is FALSE, Q has ncol(X) columns. When Dvec is specified, each column of Q is multiplied by the corresponding value in Dvec.Note that qr.Q(qr, *) is a special case of qr.qy(qr, y) (with a “diagonal” y), and qr.X(qr, *) is basically qr.qy(qr, R) (apart from pivoting and dimnames setting).qr.R returns R. This may be pivoted, e.g., if a <- qr(x) then x[, a$pivot] = QR. The number of rows of R is either nrow(X) or ncol(X) (and may depend on whether complete is TRUE or FALSE).

See Also

qr, qr.qy.

  • qr.X
  • qr.Q
  • qr.R
library(base) p <- ncol(x <- LifeCycleSavings[, -1]) # not the 'sr' qrstr <- qr(x) # dim(x) == c(n,p) qrstr $ rank # = 4 = p Q <- qr.Q(qrstr) # dim(Q) == dim(x) R <- qr.R(qrstr) # dim(R) == ncol(x) X <- qr.X(qrstr) # X == x range(X - as.matrix(x)) # ~ < 6e-12 ## X == Q %*% R if there has been no pivoting, as here: all.equal(unname(X), unname(Q %*% R)) # example of pivoting x <- cbind(int = 1, b1 = rep(1:0, each = 3), b2 = rep(0:1, each = 3), c1 = rep(c(1,0,0), 2), c2 = rep(c(0,1,0), 2), c3 = rep(c(0,0,1),2)) x # is singular, columns "b2" and "c3" are "extra" a <- qr(x) zapsmall(qr.R(a)) # columns are int b1 c1 c2 b2 c3 a$pivot pivI <- sort.list(a$pivot) # the inverse permutation all.equal (x, qr.Q(a) %*% qr.R(a)) # no, no stopifnot( all.equal(x[, a$pivot], qr.Q(a) %*% qr.R(a)), # TRUE all.equal(x , qr.Q(a) %*% qr.R(a)[, pivI])) # TRUE too!
Documentation reproduced from package base, version 3.1.3, License: Part of R 3.1.3

Community examples

Looks like there are no examples yet.