Skip to content

Namespaces, coercion and setAs

5 messages · Roger Bivand, Matthias Kohl, Roger Koenker

#
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
#
On Fri, 26 Nov 2004, roger koenker wrote:

            
I'm far from sure about this, but is "coerce" one of the exported methods? 
I'm having the same difficulty in retrofitting a NAMESPACE to the 
forthcoming sp package of spatial classes, for S4 classes. 

I see from src/library/methods/NAMESPACE that as and coerce are exported 
from there - should a package with a NAMESPACE and S4 classes do 

import(methods) ?

Roger

  
    
#
Absolutely correct.  Adding coerce to the NAMESPACE list of 
exportMethods
resolves the problem.  Leaves only the mildly mysterious

Undocumented S4 methods:
   generic coerce and siglist numeric,matrix.diag.csr
All user-level objects in a package (including S4 classes and methods)
should have documentation entries.

to clean up.  Thanks very much!!

Roger
On Nov 26, 2004, at 12:29 PM, Roger Bivand wrote:

            
#
Hello,

does adding the line

\alias{coerce,numeric,matrix.diag.csr-method}

to the Rd-file of your "matrix.diag.csr" class solve the mysterium?

Matthias
#
Yes,  precisely.  This was done yesterday and the new version of SparseM
with NAMESPACE -- thanks again to Roger Bivand for his help with this --
should now be on CRAN.
On Nov 27, 2004, at 4:11 AM, Matthias.Kohl@uni-bayreuth.de wrote: