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]]