From Roger.Bivand at nhh.no  Tue Sep 13 20:37:40 2005
From: Roger.Bivand at nhh.no (Roger Bivand)
Date: Tue, 13 Sep 2005 20:37:40 +0200 (CEST)
Subject: [Rd] NUMERIC_POINTER question
In-Reply-To: <43161F2B@webmail.ncl.ac.uk>
Message-ID: <Pine.LNX.4.44.0509132033420.28550-100000@reclus.nhh.no>

On Tue, 13 Sep 2005, nwew wrote:

> 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)

No, I think you have to make sure that the bits are in the correct mode. 
Could you use validation at the new() to do it? A matrix could be double, 
integer, logical or character at least, but on the C side you only want 
double. I don't think expectations come into it.

Roger

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

-- 
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no



[Rd] NUMERIC_POINTER question
Roger Bivand