Creo que te faltaría poco,

Date cuenta de como está declarada la función de colvolución:

void cconv(int *l,double *x,int *n,double *s)

Aquí se definen tanto las entradas como las salidas, que es lo que
necesitas para que pueda ser "void" (que no devuelva nada).


El 2 de diciembre de 2011 10:57, José Luis Cañadas
<canadasreche@gmail.com>escribió:

> 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
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>

	[[alternative HTML version deleted]]

