From epurdom at stanford.edu  Tue Jan 17 03:38:32 2006
From: epurdom at stanford.edu (epurdom@stanford.edu)
Date: Tue, 17 Jan 2006 03:38:32 +0100 (CET)
Subject: [Rd] Error handling in solve.default (PR#8494)
Message-ID: <20060117023832.C12D519FF2@slim.kubism.ku.dk>

Hi, this is a minor problem in solve.default but I didn't see anyone 
mention it. The function does not give "correct" error-handling if given 
non-square matrix, LINPACK=F, and matrix has names attributes (either 
row or column names).

Demo:
##"correct" error handling of non-square matrix
 > temp<-diag(1,5)[,1:4]
 > solve(temp,LINPACK=F)
Error in solve.default(diag(1, 5)[, 1:4], LINPACK = F) :
        'A' (5 x 4) must be square

#indeciferable error handling when same matrix is given names attributes
 > temp<-diag(1,5)[,1:4]
 > rownames(temp)<-as.character(1:5)
 > colnames(temp)<-as.character(1:4)
 > solve(temp,LINPACK=F)
Error in "rownames<-"(`*tmp*`, value = c("1", "2", "3", "4")) :
        length of 'dimnames' [1] not equal to array extent

I think the problem is that if LINPACK=F, then the error handling of the 
argument "a" is not done until after creating a matrix "b", when none 
was given. Then, the function creates a square identity matrix for "b", 
to which it tries to assign row and column names of "a". Of course, 
since "a" is not square, they are not of the correct length.

Best,
Elizabeth



[Rd] Error handling in solve.default (PR#8494)
epurdom@stanford.edu