Thanks for your reply.
Experimenting a little further, I was able to learn a bit more and
find what is the real problem of mine what the real question is.
I could create my S4 extended class by adding these two lines in my namespace file
importClassesFrom(Matrix,Matrix)
importClassesFrom(Matrix,dMatrix)
You can also do:
importClassesFrom(Matrix, Matrix, dMatrix)
and then creating my new class in another R file
library(Matrix)
^^^^^^^
I would not call library for such a case. If you are importing
library in your package's namespace, then you probably want the
following in your DESCRIPTION file:
Depends: Matrix, methods
Imports: Matrix
[yes, there is a lot of duplication in how things are specified]
setClass("myMatClass", representation("dMatrix",myslot="numeric"))
which creates the new S4 class when my package is loaded.
The problem is that I would like to create the class inside a function of mine:
createMyS4Class() {
library(Matrix)
setClass("myMatClass", representation("dMatrix",myslot="numeric"))
}
Again, the call to library should not be needed.
so that, at some point (after my package is loaded ), I can do something like:
if (cond)
createMyS4Class()
How do you intend to use such a class? Is the real issue that you
don't want to depend on Matrix and only use it if it is available?
Now, I understand that at this point, my package environment is
locked. So the question become: Is there any way that I can unlock
my package environment, create my new S4 class and lock it back or
something?
I think that might be possible, but that doesn't make it a good idea :-)
Please let me know if that makes sense ?
I appreciate your comments.
It might help to understand what your are trying to achieve overall.
Perhaps there are other approaches...
Also, at this point, the discussion is more appropriate for R-devel.
Perhaps you can move the conversation there?
Best,
+ seth
Seth Falcon | Computational Biology | Fred Hutchinson Cancer Research Center
http://bioconductor.org