From whorfin at pixar.com  Wed Nov 19 19:50:09 2008
From: whorfin at pixar.com (whorfin at pixar.com)
Date: Wed, 19 Nov 2008 19:50:09 +0100 (CET)
Subject: [Rd] qr.coef and complex numbers - still busted for non-square
	case? (PR#13305)
Message-ID: <20081119185009.B38B7282EFC1@mail.pubhealth.ku.dk>

Full_Name: Rick Sayre
Version: 2.8.0
OS: windows, linux, os x
Submission from: (NULL) (138.72.153.166)


PR#8476 and PR#8478
http://bugs.r-project.org/cgi-bin/R/Models-fixed?id=8478
http://bugs.r-project.org/cgi-bin/R/Models-fixed?id=8476
discuss fixing qr.coef to handle complex matrices correctly

But it appears the solution now "shipping" only handles square matrices.

In 2.8.0 [linux, windows, and os x] non-square complex arguments cause 
an error.


> qr.solve(cbind(1:11,1),2*(20:30))
[1]  2 38
> qr.solve(cbind(as.complex(1:11),as.complex(1)),as.complex(2*(20:30)))
Error in coef[qr$pivot, ] <- .Call("qr_coef_cmplx", qr, y, PACKAGE = "base") :
   number of items to replace is not a multiple of replacement length

If I change the section shown by context below from qr.coef as follows:

	if (is.complex(qr$qr)) {
	    if (!is.complex(y))
		y[] <- as.complex(y)
	    coef <- matrix(NA_complex_, nrow = p, ncol = ny)
	    #coef[qr$pivot, ] <- .Call("qr_coef_cmplx", qr, y, PACKAGE = "base")
	    coef[qr$pivot, ] <- .Call("qr_coef_cmplx", qr, y, PACKAGE = "base")[1:p,]
	    return(if (im) coef else c(coef))
	}

then i get goodness:
my.qr.solve(cbind(as.complex(1:11),as.complex(1)),as.complex(2*(20:30)))
[1]  2+0i 38+0i

I do not pretend to fully understand the afflicted code, so it is very likely
"I'm doing it wrong".  What I just did above is exactly what Chris
proposed in #8478, but it appears this was declared to be incorrect and
changed.
The current code in qr.coef seems to handle square complex matrices, but as you
see above, it does not handle non-square conditions.



[Rd] qr.coef and complex numbers - still busted for non-square case? (PR#13305)
whorfin at pixar.com