From roger at ysidro.econ.uiuc.edu  Fri Nov 26 18:50:33 2004
From: roger at ysidro.econ.uiuc.edu (roger koenker)
Date: Fri Nov 26 18:50:47 2004
Subject: [Rd] Namespaces, coercion and setAs
Message-ID: <AB6CEF9E-3FD3-11D9-9DB8-000393A361A2@ysidro.econ.uiuc.edu>

I'm trying to resolve a small problem that has arisen from introducing a
NAMESPACE for the package SparseM.  Prior to the namespace I had
a class "matrix.diag.csr" that consisted of diagonal sparse matrices.  
It
was defined to have the same attributes as the matrix.csr class and 
setAs
was used to define how to coerce integers and vectors into this form:

setClass("matrix.diag.csr","matrix.csr")

setAs("numeric","matrix.diag.csr",function(from){
         if(length(from)==1){
                 n <- as.integer(from)
                 if(n>0) from  <-  rep(1,n)
                 else stop("Sparse identity matrices must have positive, 
integer dimension")
                 }
         else n <- length(from)
         return(new("matrix.diag.csr", ra = from ,ja = as.integer(1:n),
                 ia = as.integer(1:(n+1)), dimension = 
as.integer(c(n,n))))
         })

This seemed to be fine.   I could do,

	A  <- as(5,"matrix.diag.csr")

and A would be a 5x5 identity matrix in sparse form.  But post-namespace
I get:

 >A <-  as(5,"matrix.diag.csr")
Error in as(5, "matrix.diag.csr") : No method or default for coercing 
"numeric" to "matrix.diag.csr"

so apparently using exportClass(matrix.diag.csr)  isn't sufficient for 
coerce to know what to do.
Using findClass("matrix.diag.csr") indicates that the class is 
recognized to be from SparseM,
so my question is:  is there some mechanism that I'm missing in the 
NAMESPACE scheme
that would enable my old setAs() directive to work, or is there some 
other suggestion on how
to proceed?


url:	www.econ.uiuc.edu/~roger        	Roger Koenker
email	rkoenker@uiuc.edu			Department of Economics
vox: 	217-333-4558				University of Illinois
fax:   	217-244-6678				Champaign, IL 61820


[Rd] Namespaces, coercion and setAs
roger koenker