[R-es] .C interface

José Luis Cañadas canadasreche en gmail.com
Vie Dic 2 10:57:26 CET 2011


Hola a todos.

Lo primero de todo.
No tengo ni idea de C pero estoy intentando compilar un pequeño trozo de
código simple para poder usar luego esa función dentro de R.

Estaba viendo el documento .C interface y viendo el ejemplo de las
convoluciones, y si me sale.
el ejemplo es el siguiente.

#### códido en C ####
#include <R.h>
void cconv(int *l,double *x,int *n,double *s)
{
 double *y = x + (*n - *l), *z = x + *l , *u = x;
 while (u < y)
  *s += *u++ * *z++;
}
######################

Luego en la terminal de linux, ejecuto

R CMD SHLIB cconv.c

para compilar

Ya estaría disponible para R de forma que al ejecutar

dyn.load("cconv.so")
rconv <- function(lag,x) {
    .C("cconv",as.integer(lag),
    as.double(x),
    as.integer(length(x)),
    as.double(0.0))[[4]]
}

Mi problema es que tengo un código C  (generado por de esta forma
/*--- start generated code ---*/
 
#include <math.h>
#include <string.h>
#include <memory.h>
#include <ctype.h>
 
#include "cscore.h"
 
#include "csparm.h"
 
#define csNIQUIST       indata[9].data.fnum
#define csGRP_NIQUIST       outdata[13].data.fnum
#define csWOE_NIQUIST       outdata[52].data.fnum
 
   /*------------------------------------------------------------**/
   /* variable: niquist*/
   /*------------------------------------------------------------**/
   if ( missingn(csNIQUIST))
   {
      csGRP_NIQUIST = 2.0;
      csWOE_NIQUIST = -0.025041389;
   }
   else if (! missingn(csNIQUIST))
   {
      if ( csNIQUIST < -135887.86)
      {
         csGRP_NIQUIST = 1.0;
         csWOE_NIQUIST = -0.469640449;
      }
      else if ( -135887.86 <= csNIQUIST && csNIQUIST < -3826.96)
      {
         csGRP_NIQUIST = 2.0;
         csWOE_NIQUIST = -0.025041389;
      }
      else if ( -3826.96 <= csNIQUIST)
      {
         csGRP_NIQUIST = 3.0;
         csWOE_NIQUIST = 0.0659986919;
      }
   }
Pero no tengo ni idea de como ponerlo en forma de void nombre_funcion( )

Me suena que en las jornadas se habló de que era posible usar código C
en R .
¿alguna idea, o me pongo a estudiar un poco de C directamente???

Gracias y un saludo



Más información sobre la lista de distribución R-help-es