From jeff.hamann at forestinformatics.com  Wed Feb 18 18:40:28 2004
From: jeff.hamann at forestinformatics.com (Jeff D. Hamann)
Date: Wed Feb 18 18:42:38 2004
Subject: [Rd] return a list of vectors from C?
Message-ID: <03a101c3f646$55855190$0a00a8c0@rodan>

I've been working on a shared library that will be called from R. The
functions pass several vectors in and out (residuals, parameters, etc) and I
would like to be able to return a list of objects. I'm familiar with return
single objects (vectors, etc) from a C function, but need a little help for
returning a list of objects.

My code so far looks something like:

/* this function will perform the same tasks as the previous */
/* and return a list of the values rather than just the  */
/* optimal values. It should return the optimization info as */
/* well as the residual values from the flikam function  */
SEXP testfunc2(
   SEXP *pq,
   SEXP *obs )
{

   int  i;
   double *pq_vect;
   double *obs_vect;

   SEXP  ret_val;

   PROTECT( pq = coerceVector( pq, REALSXP ) );
   PROTECT( obs = coerceVector( obs, REALSXP ) );

   pq_vect = REAL( pq );
   obs_vect = REAL( obs );


   /* call my functions for the results */


   /* generate the output list */
   PROTECT( ret_val = allocVector( VECSXP, NPQ ) );
   for( i = 0; i < NPQ; i++ )
   {
      //REAL(ret_val)[i] = XMIN[i];
      //PROTECT( ret_val = allocVector( VECSXP, NPQ ) );
      //SET_VECTOR_ELT( ret_val, i, 3.14159 );

      //SET_VECTOR_ELT( ret_val, i, pq );


      /* generate the output vector */
/*       PROTECT( ret_val = allocVector( REALSXP, NPQ ) ); */
/*       for( i = 0; i < NPQ; i++ ) */
/*       { */
/*   REAL(ret_val)[i] = XMIN[i]; */
/*       } */

   }

   UNPROTECT( 3 );

   return ret_val;

}


What package would be a good example of how to do this?

Jeff.

---
Jeff D. Hamann
Forest Informatics, Inc.
PO Box 1421
Corvallis, Oregon USA 97339-1421
(office) 541-754-1428
(cell) 541-740-5988
jeff.hamann@forestinformatics.com
www.forestinformatics.com


[Rd] return a list of vectors from C?
Jeff D. Hamann