30 lines
881 B
C
30 lines
881 B
C
#include <Rinternals.h>
|
|
|
|
void grad(const int n, const int p, const int q,
|
|
const double *X,
|
|
const double *X_diff,
|
|
const double *Y,
|
|
const double *V,
|
|
const double h,
|
|
double *G, double *loss);
|
|
|
|
SEXP grad_c(SEXP X, SEXP X_diff, SEXP Y, SEXP V, SEXP h) {
|
|
SEXP G = PROTECT(allocMatrix(REALSXP, nrows(V), ncols(V)));
|
|
SEXP loss = PROTECT(ScalarReal(0.0));
|
|
|
|
grad(nrows(X), ncols(X), ncols(V),
|
|
REAL(X), REAL(X_diff), REAL(Y), REAL(V), *REAL(h),
|
|
REAL(G), REAL(loss));
|
|
|
|
SEXP out = PROTECT(allocVector(VECSXP, 2));
|
|
SET_VECTOR_ELT(out, 0, G);
|
|
SET_VECTOR_ELT(out, 1, loss);
|
|
SEXP names = PROTECT(allocVector(STRSXP, 2));
|
|
SET_STRING_ELT(names, 0, mkChar("G"));
|
|
SET_STRING_ELT(names, 1, mkChar("loss"));
|
|
setAttrib(out, install("names"), names);
|
|
|
|
UNPROTECT(4);
|
|
return out;
|
|
}
|