I'm not sure if I know exactly what you're saying, so sorry if this
doesn't answer your question.

Everywhere you write double *, replace it with Rcomplex *
Replace REALSXP with CPLXSXP
Replace REAL() with COMPLEX()
When getting / / setting the real and imaginary parts, use x.r and x.i
and x.r = u and x.i = v

On Fri, Mar 13, 2026 at 10:25 PM Therneau, Terry M., Ph.D. via R-help
<[email protected]> wrote:
>
> I've often used the following paradym in C code to define a list object 
> returned to R
>
>      static const char *outnames[]= {"dvec", "A", "Ainv",  "P", ""};
>      SEXP rval, stemp;
>      double *dvec, *A, *Ainv;
>      int *P;
>
>
>      PROTECT(rval = mkNamed(VECSXP, outnames));
>      stemp=  SET_VECTOR_ELT(rval, 0, allocVector(REALSXP, nc));
>      dvec= REAL(stemp);
>      stemp = SET_VECTOR_ELT(rval, 1, allocMatrix(REALSXP, nc, nc));
>      A = REAL(stemp);
>
> Then the code puts values into dvec[i] and etc. and finally returns rval.
>
> I'm missing how to do this when returning a complex value.   I've looked 
> through the
> "Writing R extension" manual and have come up dry.  What am I missing?
>
> Terry T.
>
>
> --
> Terry M Therneau, PhD
> Department of Quantitative Health Sciences
> Mayo Clinic
> [email protected]
>
> "TERR-ree THUR-noh"
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> [email protected] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[email protected] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to