On Fri, Aug 12, 2011 at 1:06 AM, Lars Wißler <jah...@googlemail.com> wrote: > Dear R users, > > I want to call C code via the .C or .Call interface. This works fine > with integer values but using doubles the array received in C will be > set to zeros. > > I have tried the convolve examples (Writing R extensions, chapter 5.2) > and still the resulting array consists of zeros. > > My code (shortened for my purposes. Original did not work either): > ------------------------------------------------------------ > convolve.r > > a=array(1, c(4)) > b=array(3, c(4)) > > print(a) > print(b) > > .C("convolve", > as.double(a), > as.double(b)) > > ---------------------------------------------------------------- > convolve.c > > void convolve(double* a, double* b){ > int i; > > for(i=0;i<4;i++) Rprintf("a: %d", a[i]); > for(i=0;i<4;i++) Rprintf("b: %d", b[i]); > }
The C code here is wrong for two reasons. Firstly, there's no declaration for Rprintf(), because you don't include the header file. Secondly, you're using %d to print, which means you are telling the compiler you're passing ints to Rprintf(), but you are actually passing doubles. When I fix these problems the code works for me. -thomas Thomas Lumley Professor of Biostatistics University of Auckland ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel