double C_ConditionalPvalue(const double tstat, SEXP linexpcov, const int type, double tol, int *maxpts, double *releps, double *abseps) { int pq; double ans = 1.0; pq = get_dimension(linexpcov); switch(type) { /* maxabs-type test statistic */ case MAXABS: ans = C_maxabsConditionalPvalue(tstat, REAL(GET_SLOT(linexpcov, PL2_covarianceSym)), pq, maxpts, releps, abseps, &tol); break; /* quadform-type test statistic */ case QUADFORM: /* var = 0 => rank = 0 */ if (REAL(GET_SLOT(linexpcov, PL2_rankSym))[0] > 0.5) ans = C_quadformConditionalPvalue(tstat, REAL(GET_SLOT(linexpcov, PL2_rankSym))[0]); break; default: error("C_ConditionalPvalue: undefined value for type argument"); } return(ans); }
SEXP R_quadformConditionalPvalue(SEXP tstat, SEXP df) { SEXP ans; PROTECT(ans = allocVector(REALSXP, 1)); REAL(ans)[0] = C_quadformConditionalPvalue(REAL(tstat)[0], REAL(df)[0]); UNPROTECT(1); return(ans); }