Hi,
The Matrix package and the as.matrix method do not seem to be compatible inside 
of a package.

Here's an example. I've created a simple package "mat" that defines an 
eponymous class and as.matrix method on that class. All is well, unless that 
package has the Matrix package in its Depends or Imports (and imports, e.g. the 
"Diagonal" function). Then my as.matrix method stops working, even if I'm not 
using any part of the Matrix package.

Here's an example on R 3.3.2:

First, create an empty package "mat" (e.g. with package.skeleton) with one file 
in mat/R/mat.R with the following contents:

setClass("mat", representation(H="matrix"))
mat <- function(H) new("mat", H=H)
setMethod("as.matrix", signature("mat"), function(x, ...) crossprod(x@H))
testmat <- function() {
    H <- matrix(1:3, 1, 3)
    M <- mat(H)
    as.matrix(M)
}

Then install the mat package :
> require(mat)
> testmat()
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    4    6
[3,]    3    6    9

All works fine!

Now add "Depends: Matrix" into the package's DESCRIPTION file (alternatively 
add "Imports: Matrix" and 'importFrom("Matrix","Diagonal")' in the NAMESPACE).

Try again:
> require(mat)
> testmat()
Error in as.vector(data) : 
  no method for coercing this S4 class to a vector

Bug? If not, can anyone provide a work around? In my case, I'd like to mix 
matrix and Matrix functions in my package, but am obviously having difficulty.

I've come across a somewhat similar report on stackoverflow 
http://stackoverflow.com/questions/13812373/overloading-operator-in-r-s4-classes-and-matrix-package
 regarding defining the "+" operator with the Matrix package, but I don't think 
the solution or the problem quite applies.

Thanks in advance, Robert

> R.version
               _                           
platform       x86_64-pc-linux-gnu         
arch           x86_64                      
os             linux-gnu                   
system         x86_64, linux-gnu           
status                                     
major          3                           
minor          3.2                         
year           2016                        
month          10                          
day            31                          
svn rev        71607                       
language       R                           
version.string R version 3.3.2 (2016-10-31)
nickname       Sincere Pumpkin Patch       

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to