Skip to content
Prev 33685 / 398513 Next

S4 classes, creating in C

Hi Laurence,
Laurence Kell FM CEFAS wrote:
[...]
just tried your example in R 1.6.2 and it worked. And as you say for R 1.7.1 it 
won't.

So take a look at (R 1.7.1)

 > setClass("LUdecompositio", representation(a="matrix", pivot = "integer"), 
prototype(pivot=NA))
[1] "LUdecompositio"

 > lu<-new("LUdecompositio")
Error in makePrototypeFromClassDef(properties, ClassDef, immediate) :
         In making the prototype for class "LUdecompositio" elements of the 
prototype failed to match the corresponding slot class: pivot (class " integer ")

 > setClass("LUdecompositi", representation(a="matrix", pivot = "integer"), 
prototype(pivot=as.integer(NA))
+
+ )
[1] "LUdecompositi"

 > lu3<-new("LUdecompositi")
 > lu3
An object of class "LUdecompositi"
Slot "a":
<0 x 0 matrix>

Slot "pivot":
[1] NA

 > is(lu3 at pivot)
[1] "integer" "vector"  "numeric"

So providing an explicit cast in the prototype cures the problem.

HTH,

   Matthias