R package can now be installed (compilation OK)
[valse.git] / src / adapters / a.selectiontotale.c
index 3d647fb..3bfab9f 100644 (file)
@@ -2,7 +2,7 @@
 #include <Rdefines.h>
 #include "selectiontotale.h"
 
-SEXP EMGLLF(
+SEXP selectiontotale(
        SEXP phiInit_,
        SEXP rhoInit_,
        SEXP piInit_,
@@ -20,10 +20,10 @@ SEXP EMGLLF(
        SEXP dimX = getAttrib(X_, R_DimSymbol);
        int n = INTEGER(dimX)[0];
        int p = INTEGER(dimX)[1];
-       SEXP dimRho = getAttrib(rhoInit_, R_DimSymbol);
-       int m = INTEGER(dimRho)[0];
-       int k = INTEGER(dimRho)[2];
-       int L = INTEGER(getAttrib(glambda_, R_LengthSymbol))[0];
+       SEXP dimRhoInit = getAttrib(rhoInit_, R_DimSymbol);
+       int m = INTEGER(dimRhoInit)[0];
+       int k = INTEGER(dimRhoInit)[2];
+       int L = length(glambda_);
 
        ////////////
        // INPUTS //
@@ -37,7 +37,7 @@ SEXP EMGLLF(
        double tau = NUMERIC_VALUE(tau_);
 
        // Get pointers from SEXP arrays ; WARNING: by columns !
-       double* piInit = REAL(phiInit_);
+       double* phiInit = REAL(phiInit_);
        double* rhoInit = REAL(rhoInit_);
        double* piInit = REAL(piInit_);
        double* gamInit = REAL(gamInit_);
@@ -49,22 +49,25 @@ SEXP EMGLLF(
        // OUTPUTS //
        /////////////
 
-       int Size = pow(rangmax-rangmin+1,k);
-       SEXP A1, A2, rho, pi, dimA;
+       SEXP A1, A2, rho, pi, dimA, dimRho;
        PROTECT(dimA = allocVector(INTSXP, 3));
        int* pDimA = INTEGER(dimA);
        pDimA[0] = p; pDimA[1] = m+1; pDimA[2] = L;
-       PROTECT(A1 = allocArray(REALSXP, dimA));
-       PROTECT(A2 = allocArray(REALSXP, dimA));
-       PROTECT(rho = allocArray(REALSXP, dimRho);
+       PROTECT(A1 = allocArray(INTSXP, dimA));
+       PROTECT(A2 = allocArray(INTSXP, dimA));
+       PROTECT(dimRho = allocVector(INTSXP, 4));
+       int* pDimRho = INTEGER(dimRho);
+       pDimRho[0] = m; pDimRho[1] = m; pDimRho[2] = k; pDimRho[3] = L;
+       PROTECT(rho = allocArray(REALSXP, dimRho));
        PROTECT(pi = allocMatrix(REALSXP, k, L));
-       double *pA1=REAL(A1), *pA2=REAL(A2), *pRho=REAL(rho), *pPi=REAL(pi);
+       int *pA1=INTEGER(A1), *pA2=INTEGER(A2);
+       double *pRho=REAL(rho), *pPi=REAL(pi);
 
        /////////////////////////////
        // Call to selectiontotale //
        /////////////////////////////
 
-       selectiontotale(
+       selectiontotale_core(
                phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda,X,Y,seuil,tau,
                pA1,pA2,pRho,pPi,
                n,p,m,k,L);
@@ -77,10 +80,10 @@ SEXP EMGLLF(
        for (int i=0; i<4; i++)
                SET_STRING_ELT(listNames,i,mkChar(lnames[i]));
        setAttrib(listParams, R_NamesSymbol, listNames);
-       SET_ARRAY_ELT(listParams, 0, A1);
-       SET_ARRAY_ELT(listParams, 1, A2);
-       SET_ARRAY_ELT(listParams, 2, rho);
-       SET_MATRIX_ELT(listParams, 3, pi);
+       SET_VECTOR_ELT(listParams, 0, A1);
+       SET_VECTOR_ELT(listParams, 1, A2);
+       SET_VECTOR_ELT(listParams, 2, rho);
+       SET_VECTOR_ELT(listParams, 3, pi);
 
        UNPROTECT(7);
        return listParams;