From reid_huntsinger at merck.com  Tue Sep 13 20:43:33 2005
From: reid_huntsinger at merck.com (Huntsinger, Reid)
Date: Tue, 13 Sep 2005 14:43:33 -0400
Subject: [Rd] NUMERIC_POINTER question
Message-ID: <355C35514FEAC9458F75947F5270974D076CC7@usctmx1103.merck.com>

You have to coerce to numeric yourself if that's what you want. Eg in the R
code, as.numeric(1:12) rather than 1:12. Or check the type first in C with
TYPEOF before doing NUMERIC_POINTER or INTEGER_POINTER (the difference is
that the two do different casts; they both point a fixed offset into the R
data structure and I'm not sure if there's a guarantee that this offset
needs to be the same, so perhaps the two don't even point to the same
location...).

Reid Huntsinger

-----Original Message-----
From: r-devel-bounces at r-project.org [mailto:r-devel-bounces at r-project.org]
On Behalf Of nwew
Sent: Tuesday, September 13, 2005 2:26 PM
To: r-devel
Subject: [Rd] NUMERIC_POINTER question


Dear R-developers,

Using .Call I pass a S4 class with e.g. the following class definition:

setClass("mmatrix",representation(
   data="matrix")
)

On the "C side" i do
mat = GET_SLOT(vs,install("data"));
and then:
printf("%f\n",NUMERIC_POINTER(mat)[1]);


The above print statement produces the correct output if 
xx<- new("mmatrix")
xx at data<-matrix(1:12+0.1,3,4). (data is double)

However it prints 
0.0000 
if xx at data are integers ( xx at data<-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)


cheers
Eryk

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



[Rd] NUMERIC_POINTER question
Huntsinger, Reid