projects
/
valse.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
progress in debug: fix LLF/llh mismatch, and length + add adapter test in test/
[valse.git]
/
pkg
/
src
/
adapters
/
a.EMGLLF.c
diff --git
a/pkg/src/adapters/a.EMGLLF.c
b/pkg/src/adapters/a.EMGLLF.c
index
0df00bd
..
9b004c2
100644
(file)
--- a/
pkg/src/adapters/a.EMGLLF.c
+++ b/
pkg/src/adapters/a.EMGLLF.c
@@
-2,6
+2,7
@@
#include <Rdefines.h>
#include "EMGLLF.h"
#include <Rdefines.h>
#include "EMGLLF.h"
+// See comments in src/sources/EMGLLF.c and R/EMGLLF.R (wrapper)
SEXP EMGLLF(
SEXP phiInit_,
SEXP rhoInit_,
SEXP EMGLLF(
SEXP phiInit_,
SEXP rhoInit_,
@@
-13,7
+14,7
@@
SEXP EMGLLF(
SEXP lambda_,
SEXP X_,
SEXP Y_,
SEXP lambda_,
SEXP X_,
SEXP Y_,
- SEXP
tau
_
+ SEXP
eps
_
) {
// Get matrices dimensions
int n = INTEGER(getAttrib(X_, R_DimSymbol))[0];
) {
// 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_);
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_);
// Get pointers from SEXP arrays ; WARNING: by columns !
double* phiInit = REAL(phiInit_);
@@
-45,7
+46,7
@@
SEXP EMGLLF(
// OUTPUTS //
/////////////
// 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;
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(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));
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 //
////////////////////
////////////////////
// Call to EMGLLF //
////////////////////
- EMGLLF_core(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X,Y,
tau
,
- pPhi,pRho,pPi,pL
LF,pS
,
+ EMGLLF_core(phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,lambda,X,Y,
eps
,
+ pPhi,pRho,pPi,pL
lh,pS,pAffec
,
n,p,m,k);
// Build list from OUT params and return it
SEXP listParams, listNames;
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<nouts; i++)
SET_STRING_ELT(listNames,i,mkChar(lnames[i]));
setAttrib(listParams, R_NamesSymbol, listNames);
SET_VECTOR_ELT(listParams, 0, phi);
SET_VECTOR_ELT(listParams, 1, rho);
SET_VECTOR_ELT(listParams, 2, pi);
SET_STRING_ELT(listNames,i,mkChar(lnames[i]));
setAttrib(listParams, R_NamesSymbol, listNames);
SET_VECTOR_ELT(listParams, 0, phi);
SET_VECTOR_ELT(listParams, 1, rho);
SET_VECTOR_ELT(listParams, 2, pi);
- SET_VECTOR_ELT(listParams, 3,
LLF
);
+ SET_VECTOR_ELT(listParams, 3,
llh
);
SET_VECTOR_ELT(listParams, 4, S);
SET_VECTOR_ELT(listParams, 4, S);
+ SET_VECTOR_ELT(listParams, 5, affec);
- UNPROTECT(
9
);
+ UNPROTECT(
10
);
return listParams;
}
return listParams;
}