This is not the appropriate list for C-level questions. Please study the
posting guide and repost on the right list.
Also, you might want to also show how you actually call this from R. Are
you by any chance using .External instead of .Call ?
Romain
Le 15/06/10 23:20, Fabian Z?pernick a ?crit :>
> Hi
>
> when I call the function below in R, i get the error: Object
'pairlist'
> can't be converted to 'double'.
>
> #include<R.h>
> #include<Rdefines.h>
> #include<Rmath.h>
>
> SEXP CSimPoisson(SEXP lambda, SEXP tgrid, SEXP T2M, SEXP Ni, SEXP NT)
> {
> double sign, EVar;
> double *xlambda, *xtgrid, *xT2M, *xNi, *xNT, *xtau;
> SEXP tau;
> int ltgrid =0;
> int i = 0;
> int j = 0;
> sign = 0;
> EVar = 0;
>
> ltgrid = LENGTH(tgrid);
> PROTECT(lambda = AS_NUMERIC(lambda));
> PROTECT(tgrid = AS_NUMERIC(tgrid));
> PROTECT(T2M = AS_NUMERIC(T2M));
> PROTECT(Ni = AS_NUMERIC(Ni));
> PROTECT(NT = AS_NUMERIC(NT));
> PROTECT(tau = NEW_NUMERIC(1));
> xlambda = NUMERIC_POINTER(lambda);
> xtgrid = NUMERIC_POINTER(tgrid);
> xT2M = NUMERIC_POINTER(T2M);
> xNi = NUMERIC_POINTER(Ni);
> xNT = NUMERIC_POINTER(NT);
> xtau = NUMERIC_POINTER(tau);
> GetRNGstate();
> if(xlambda[0] != 0)
> {
> while(1)
> {
> EVar = rexp(xlambda[0]);
> sign = sign + EVar;
> if (sign> xT2M[0])
> {
> break;
> }
> xtau = Realloc(xtau, i+1, double);
> xtau[i] = sign;
> i = i+1;
> for(j; j< ltgrid;j++)
> {
> if (xtgrid[j]< sign)
> {
> xNi[j] = xNT[0];
> }
> {
> break;
> }
> }
> xNT[0] = xNT[0] + 1;
> }
> for(j;j< ltgrid;j++)
> {
> xNi[j] = xNT[0];
> }
> }
> PutRNGstate();
> UNPROTECT(6);
> return tau;
> }
--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://bit.ly/98Uf7u : Rcpp 0.8.1
|- http://bit.ly/c6YnCi : graph gallery collage
`- http://bit.ly/bZ7ltC : inline 0.3.5