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") > [EMAIL PROTECTED]<-matrix(1:12+0.1,3,4). (data is double) > > 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)
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@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: [EMAIL PROTECTED] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel