I am using C code to create an S4 object based on Douglas Bates's example
in his lecture notes on
<http://www.ci.tuwien.ac.at/Conferences/DSC-2003/Tutorials/RExtensions/slide
s.pdf>
http://www.ci.tuwien.ac.at/Conferences/DSC-2003/Tutorials/RExtensions/slides
.pdf
e.g.
SEXP La_DGE_dc(SEXP A)
{
SEXP aa = PROTECT(duplicate(A));
SEXP adims, pivot, val;
int m, n, info;
if (!isMatrix(aa) || !isReal(aa)) {
error("A must be a double precision matrix");
}
adims = GET_DIM(aa); m = INTEGER(adims)[0]; n = INTEGER(adims)[1];
pivot = PROTECT(NEW_INTEGER(m < n ? m : n));
F77_CALL(dgetrf)(&m, &n, REAL(aa), &m, INTEGER(pivot), &info);
check_Lapack_error(info, "dtrtrf");
val = PROTECT(NEW_OBJECT(MAKE_CLASS("LUdecomposition")));
SET_SLOT(val, install("a"), aa);
SET_SLOT(val, install("pivot"), pivot);
UNPROTECT(3);
return val;
}
LUdecomposition is an S4 class defined as
setClass("LUdecomposition", representation(a="matrix", pivot = "integer"))
This works in R 1.7.0 and R 1.7.1 but if I initialise any of the slots
setClass("LUdecomposition", representation(a="matrix", pivot = "integer"),
prototype=list(pivot = NA) )
then I get the following error message in R 1.7.1 but not R 1.7.0
Error in makePrototypeFromClassDef(properties, ClassDef, immediate) :
In making the prototype for class "LUdecomposition" elements of the
prototype
failed to match the corresponding slot class: pivot (class " integer
")
Why can I no longer use the prototype to set the default values?
Laurence Kell
CEFAS Lowestoft Laboratory
Pakefield Road
Lowestoft, NR33 0HT
UK
Tel +44 1502 52 42 57
Fax +44 1502 52 45 11
e-mail [EMAIL PROTECTED]
[[alternative HTML version deleted]]
______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help