X-Git-Url: https://git.auder.net/?p=valse.git;a=blobdiff_plain;f=src%2Fadapters%2Fa.selectiontotale.c;h=3bfab9f952eea95334af92ed27089ea9b06af584;hp=3d647fbadedfbbd806e5ae9eba42d868d725b645;hb=09ab3c164abb566764e86a175b5973241e708fd6;hpb=8e92c49c15bdacebf46190e7c8279bd227873928 diff --git a/src/adapters/a.selectiontotale.c b/src/adapters/a.selectiontotale.c index 3d647fb..3bfab9f 100644 --- a/src/adapters/a.selectiontotale.c +++ b/src/adapters/a.selectiontotale.c @@ -2,7 +2,7 @@ #include #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;