From bhh at xs4all.nl  Mon Dec  3 15:25:21 2012
From: bhh at xs4all.nl (Berend Hasselman)
Date: Mon, 3 Dec 2012 15:25:21 +0100
Subject: [Rd] qr.qy and qr.qty give an error message when y is integer and
	LAPACK=TRUE
Message-ID: <7FEC69A9-D90B-4C33-B91B-F388BCCF5AAF@xs4all.nl>


With this example

set.seed(123)
A <- matrix(runif(40), nrow = 8)
y <- 1:nrow(A)

A.laqr <- qr(A, LAPACK=TRUE)

both  qr.qy(A.laqr,y)  and  qr.qty(A.laqr,y)  give the respective error messages

Error in qr.qy(A.laqr, y) : 'b' must be a numeric matrix
Error in qr.qty(A.laqr, y) : 'b' must be a numeric matrix

However when Lapack is not used as in 

A.liqr <- qr(A, LAPACK=FALSE)

qr.qy(A.liqr,y) and qr.qty(A.liqr,y) don't issue error messages.

Looking at the source of qr.qy and qr.qty in https://svn.r-project.org/R/trunk/src/library/base/R/qr.R
I see that in the case of Lapack the storage.mode of y is not set to "double" (in contrast to when Linpack QR has been used).

I assume that the error issued when LAPACK=TRUE is not intended.

Berend

Suggested code change  in qr.qy
Replace 

    if(!is.null(a) && is.logical(a) && a)
        return(.Call("qr_qy_real", qr, as.matrix(y), 0, PACKAGE = "base"))

with

    if(!is.null(a) && is.logical(a) && a) {
        storage.mode(y) <- "double"
        return(.Call("qr_qy_real", qr, as.matrix(y), 0, PACKAGE = "base"))
    }

and a similar change in qr.qty


[Rd] qr.qy and qr.qty give an error message when y is integer and LAPACK=TRUE
Berend Hasselman