Thanks Roger, Simon, Reid,
It's indeed trivial, if you stop to believe that S4 provides any type of
type safety. However, having in mind all the arguments why S4, and that
it was designed in order to incorporate type safety on both the R and C
side I was not expecting that when trying for the *first* time, the
get_slot and set_slot "stuff" I will run in exactly the problems which
S4 is supposed to solve.
Of course I knew that "matrix" is not S4 and it is therefore even not a
proper class. But this complexity sometimes blows your mind.
Cheers
Eryk.
Simon Urbanek wrote:
Eryk,
On Sep 13, 2005, at 2:26 PM, nwew wrote:
printf("%f\n",NUMERIC_POINTER(mat)[1]);
[...]
However it prints
0.0000
if [EMAIL PROTECTED] are integers ( [EMAIL PROTECTED]<-matrix(1:12,3,4) ).
Can anyone explain it to me why?
I thought that NUMERIC_POINTER makes it clear that i expect datatype
numeric.
(Why otherwise the distinction with INTEGER_POINTER)
You answered your own question - NUMERIC_POINTER expects that the SEXP
you pass to it is numeric=double. When you use it, it's your
responsibility to make sure that the SEXP is numeric and not integer or
anything else. Probably you may want to use AS_NUMERIC to ensure that.
[btw: NUMERIC_POINTER() is a compatibility macro for REAL() and
AS_NUMERIC(x) for coerceVector(x,REALSXP)].
Also you should be aware that C uses 0-based indices so
NUMERIC_POINTER(mat)[1] accesses the 2nd element of the vector.
Cheers,
Simon
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel