X-Git-Url: https://git.auder.net/?p=valse.git;a=blobdiff_plain;f=pkg%2Fsrc%2Fadapters%2Fa.EMGLLF.c;h=9b004c2fcdbd7e9467bcaa80c0d75216fc11e684;hp=0df00bdaa9fcde3bc6b556227e39a8affdcbe493;hb=6279ba8656582370e7242ff9e77d22c23fe8ca04;hpb=1c45d8e4f6fd4209d26709f17a58920218ee828d diff --git a/pkg/src/adapters/a.EMGLLF.c b/pkg/src/adapters/a.EMGLLF.c index 0df00bd..9b004c2 100644 --- a/pkg/src/adapters/a.EMGLLF.c +++ b/pkg/src/adapters/a.EMGLLF.c @@ -2,6 +2,7 @@ #include #include "EMGLLF.h" +// See comments in src/sources/EMGLLF.c and R/EMGLLF.R (wrapper) SEXP EMGLLF( SEXP phiInit_, SEXP rhoInit_, @@ -13,7 +14,7 @@ SEXP EMGLLF( SEXP lambda_, SEXP X_, SEXP Y_, - SEXP tau_ + SEXP eps_ ) { // Get matrices dimensions int n = INTEGER(getAttrib(X_, R_DimSymbol))[0]; @@ -31,7 +32,7 @@ SEXP EMGLLF( int maxi = INTEGER_VALUE(maxi_); double gamma = NUMERIC_VALUE(gamma_); double lambda = NUMERIC_VALUE(lambda_); - double tau = NUMERIC_VALUE(tau_); + double eps = NUMERIC_VALUE(eps_); // Get pointers from SEXP arrays ; WARNING: by columns ! double* phiInit = REAL(phiInit_); @@ -45,7 +46,7 @@ SEXP EMGLLF( // OUTPUTS // ///////////// - SEXP phi, rho, pi, LLF, S, dimPhiS, dimRho; + SEXP phi, rho, pi, llh, S, affec, dimPhiS, dimRho; PROTECT(dimPhiS = allocVector(INTSXP, 3)); int* pDimPhiS = INTEGER(dimPhiS); pDimPhiS[0] = p; pDimPhiS[1] = m; pDimPhiS[2] = k; @@ -55,32 +56,36 @@ SEXP EMGLLF( PROTECT(phi = allocArray(REALSXP, dimPhiS)); PROTECT(rho = allocArray(REALSXP, dimRho)); PROTECT(pi = allocVector(REALSXP, k)); - PROTECT(LLF = allocVector(REALSXP, maxi-mini+1)); + PROTECT(llh = allocVector(REALSXP, 1)); PROTECT(S = allocArray(REALSXP, dimPhiS)); - double *pPhi=REAL(phi), *pRho=REAL(rho), *pPi=REAL(pi), *pLLF=REAL(LLF), *pS=REAL(S); + PROTECT(affec = allocVector(INTSXP, n)); + double *pPhi=REAL(phi), *pRho=REAL(rho), *pPi=REAL(pi), *pLlh=REAL(llh), *pS=REAL(S); + int *pAffec=INTEGER(affec); //////////////////// // Call to EMGLLF // //////////////////// - EMGLLF_core(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X,Y,tau, - pPhi,pRho,pPi,pLLF,pS, + EMGLLF_core(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X,Y,eps, + pPhi,pRho,pPi,pLlh,pS,pAffec, n,p,m,k); // Build list from OUT params and return it SEXP listParams, listNames; - PROTECT(listParams = allocVector(VECSXP, 5)); - char* lnames[5] = {"phi", "rho", "pi", "LLF", "S"}; //lists labels - PROTECT(listNames = allocVector(STRSXP,5)); - for (int i=0; i<5; i++) + int nouts = 6; + PROTECT(listParams = allocVector(VECSXP, nouts)); + char* lnames[6] = {"phi", "rho", "pi", "llh", "S", "affec"}; //lists labels + PROTECT(listNames = allocVector(STRSXP,nouts)); + for (int i=0; i