[R] I can't make .C(...) web-page example.

Rau, Roland Rau at demogr.mpg.de
Sun Feb 1 16:32:01 CET 2004


Hi!

I am by no means an R-expert nor a C-expert but the document "An
Introduction to .C Interface to R" by Roger D. Peng and  Jan de Leeuw helped
me a lot to find out how it works in principle to use the .C function call.
You can find it on the homepage of Roger D. Peng
(http://www.biostat.jhsph.edu/~rpeng/ ) at the following URL:
http://www.biostat.jhsph.edu/~rpeng/docs/interface.pdf


Hope this is what you were looking for.

Best,
Roland


> -----Original Message-----
> From:	Ricardo Zorzetto Nicoliello Vencio [SMTP:rvencio at ime.usp.br]
> Sent:	Sunday, February 01, 2004 3:56 PM
> To:	R-help at stat.math.ethz.ch
> Subject:	[R] I can't make .C(...) web-page example.
> 
> 
> Hi everyone!
> 
> I'm trying to lear how to call external C code in R but even the R help
> web-page example is drive me crazy.
> 
> I copy-paste the example at:
> 
> http://stat.ethz.ch/R-manual/R-patched/doc/manual/R-exts.html#Interface%20
> functions%20.C%20and%20.Fortran
> 
> here is the example:
> 
> void convolve(double *a, int *na, double *b, int *nb, double *ab)
> {
>   int i, j, nab = *na + *nb - 1;
> 
>   for(i = 0; i < nab; i++)
>     ab[i] = 0.0;
>   for(i = 0; i < *na; i++)
>     for(j = 0; j < *nb; j++)
>       ab[i + j] += a[i] * b[j];
> }
> 
> called from R by
> 
> conv <- function(a, b)
>   .C("convolve",
>      as.double(a),
>      as.integer(length(a)),
>      as.double(b),
>      as.integer(length(b)),
>      ab = double(length(a) + length(b) - 1))$ab
> 
> 
> but using the conv function in simple examples give me trouble:
> 
> > conv(1:10,2:11)
> Error in conv(1:10, 2:11) : pairlist object cannot be coerced to double
> 
> > conv( rnorm(10,10,1) , rnorm(10,11,1) )
> Segmentation fault
> 
> > conv( c(10.53, 8.456, 6.6) , c(10.53, 8.456, 6.6) )
> Error in conv(c(10.53, 8.456, 6.6), c(10.53, 8.456, 6.6)) :
>         cannot allocate vector of length 1717986918
> 
> > a = c(1.46756, 5.56456, 2.3646)
> > b = a + 5.4
> > conv(a,b)
> Error in conv(a, b) : cannot coerce type promise to double vector
> 
> 
> and so on.
> 
> These results appear if I have only the .c file or if I use gcc -c conv.c
> to create .o file. I cannot create executable because there is no
> main(...) in .c file but just the copy-pasted example.
> 
> 
> Someone knows what is happening to me ?
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html


+++++
This mail has been sent through the MPI for Demographic Research.  Should you receive a mail that is apparently from a MPI user without this text displayed, then the address has most likely been faked.   If you are uncertain about the validity of this message, please check the mail header or ask your system administrator for assistance.




More information about the R-help mailing list