#include #include #include "sources/convexSolver.h" #include "sources/utils/algebra.h" // compute estimated ("repaired", "smoothed"...) variations from rows of M // NOTE: geographic coordinates dropped here, since they are unused SEXP getVarsWithConvexOptim( SEXP M_, SEXP NIix_, SEXP alpha_, SEXP h_, SEXP epsilon_, SEXP maxiter_, SEXP symmNeighbs_, SEXP trace_ ) { // get parameters double alpha = NUMERIC_VALUE(alpha_); double h = NUMERIC_VALUE(h_); double epsilon = NUMERIC_VALUE(epsilon_); int maxiter = INTEGER_VALUE(maxiter_); int symmNeighbs = LOGICAL_VALUE(symmNeighbs_); int trace = LOGICAL_VALUE(trace_); // extract infos from M and get associate pointer SEXP dim = getAttrib(M_, R_DimSymbol); int nrow = INTEGER(dim)[0]; int ncol = INTEGER(dim)[1]; // M is always given by columns: easier to process in rows double* pM = transpose(REAL(M_), nrow, ncol); // extract NIix list vectors in a jagged array int* lengthNIix = (int*)malloc(nrow*sizeof(int)); int** NIix = (int**)malloc(nrow*sizeof(int*)); for (int i=0; i