| QR.Auxiliaries {base} | R Documentation | 
Returns the original matrix from which the object was constructed or the components of the decomposition.
qr.X(qr, complete = FALSE, ncol =) qr.Q(qr, complete = FALSE, Dvec =) qr.R(qr, complete = FALSE)
qr | 
 object representing a QR decomposition.  This will
typically have come from a previous call to   | 
complete | 
 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.  | 
ncol | 
 integer in the range   | 
Dvec | 
 vector (not matrix) of diagonal values.  Each column of
the returned \bold{Q} will be multiplied by the corresponding
diagonal value.  Defaults to all   | 
qr.X returns \bold{X}, the original matrix from
which the qr object was constructed, provided ncol(X) <= nrow(X).
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).
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!