#include #include #include "selectiontotale.h" SEXP selectiontotale( SEXP phiInit_, SEXP rhoInit_, SEXP piInit_, SEXP gamInit_, SEXP mini_, SEXP maxi_, SEXP gamma_, SEXP glambda_, SEXP X_, SEXP Y_, SEXP seuil_, SEXP tau_ ) { // Get matrices dimensions SEXP dimX = getAttrib(X_, R_DimSymbol); int n = INTEGER(dimX)[0]; int p = INTEGER(dimX)[1]; SEXP dimRhoInit = getAttrib(rhoInit_, R_DimSymbol); int m = INTEGER(dimRhoInit)[0]; int k = INTEGER(dimRhoInit)[2]; int L = length(glambda_); //////////// // INPUTS // //////////// // get scalar parameters int mini = INTEGER_VALUE(mini_); int maxi = INTEGER_VALUE(maxi_); double gamma = NUMERIC_VALUE(gamma_); double seuil = NUMERIC_VALUE(seuil_); double tau = NUMERIC_VALUE(tau_); // Get pointers from SEXP arrays ; WARNING: by columns ! double* phiInit = REAL(phiInit_); double* rhoInit = REAL(rhoInit_); double* piInit = REAL(piInit_); double* gamInit = REAL(gamInit_); double* glambda = REAL(glambda_); double* X = REAL(X_); double* Y = REAL(Y_); ///////////// // OUTPUTS // ///////////// 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(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)); int *pA1=INTEGER(A1), *pA2=INTEGER(A2); double *pRho=REAL(rho), *pPi=REAL(pi); ///////////////////////////// // Call to selectiontotale // ///////////////////////////// selectiontotale_core( phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda,X,Y,seuil,tau, pA1,pA2,pRho,pPi, n,p,m,k,L); // Build list from OUT params and return it SEXP listParams, listNames; PROTECT(listParams = allocVector(VECSXP, 4)); char* lnames[4] = { "A1", "A2", "rho", "pi" }; //lists labels PROTECT(listNames = allocVector(STRSXP, 4)); for (int i=0; i<4; i++) SET_STRING_ELT(listNames,i,mkChar(lnames[i])); setAttrib(listParams, R_NamesSymbol, listNames); 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; }