本文整理汇总了C++中STRING_ELT函数的典型用法代码示例。如果您正苦于以下问题:C++ STRING_ELT函数的具体用法?C++ STRING_ELT怎么用?C++ STRING_ELT使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了STRING_ELT函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dag2ug
/* return the skeleton of a DAG/PDAG. */
SEXP dag2ug(SEXP bn, SEXP moral, SEXP debug) {
int i = 0, j = 0, k = 0, nnodes = 0, narcs = 0, row = 0;
int debuglevel = isTRUE(debug), *moralize = LOGICAL(moral);
int *nparents = NULL, *nnbr = NULL;
SEXP node_data, current, nodes, result, temp;
/* get the nodes' data. */
node_data = getListElement(bn, "nodes");
nnodes = length(node_data);
PROTECT(nodes = getAttrib(node_data, R_NamesSymbol));
/* allocate and initialize parents' and neighbours' counters. */
nnbr = Calloc1D(nnodes, sizeof(int));
if (*moralize > 0)
nparents = Calloc1D(nnodes, sizeof(int));
/* first pass: count neighbours, parents and resulting arcs. */
for (i = 0; i < nnodes; i++) {
/* get the number of neighbours. */
current = VECTOR_ELT(node_data, i);
nnbr[i] = length(getListElement(current, "nbr"));
/* update the number of arcs to be returned. */
if (*moralize > 0) {
/* get also the number of parents, needed to account for the arcs added
* for their moralization. */
nparents[i] = length(getListElement(current, "parents"));
narcs += nnbr[i] + nparents[i] * (nparents[i] - 1);
}/*THEN*/
else {
narcs += nnbr[i];
}/*ELSE*/
if (debuglevel > 0) {
if (*moralize > 0) {
Rprintf("* scanning node %s, found %d neighbours and %d parents.\n",
NODE(i), nnbr[i], nparents[i]);
Rprintf(" > adding %d arcs, for a total of %d.\n",
nnbr[i] + nparents[i] * (nparents[i] - 1), narcs);
}/*THEN*/
else {
Rprintf("* scanning node %s, found %d neighbours.\n", NODE(i), nnbr[i]);
Rprintf(" > adding %d arcs, for a total of %d.\n", nnbr[i], narcs);
}/*ELSE*/
}/*THEN*/
}/*FOR*/
/* allocate the return value. */
PROTECT(result = allocMatrix(STRSXP, narcs, 2));
/* allocate and set the column names. */
setDimNames(result, R_NilValue, mkStringVec(2, "from", "to"));
/* second pass: fill the return value. */
for (i = 0; i < nnodes; i++) {
/* get to the current node. */
current = VECTOR_ELT(node_data, i);
/* get the neighbours. */
temp = getListElement(current, "nbr");
for (j = 0; j < nnbr[i]; j++) {
SET_STRING_ELT(result, CMC(row, 0, narcs), STRING_ELT(nodes, i));
SET_STRING_ELT(result, CMC(row, 1, narcs), STRING_ELT(temp, j));
row++;
}/*FOR*/
/* if we are not creating a moral graph we are done with this node. */
if (*moralize == 0)
continue;
/* get the parents. */
temp = getListElement(current, "parents");
for (j = 0; j < nparents[i]; j++) {
for (k = j+1; k < nparents[i]; k++) {
SET_STRING_ELT(result, CMC(row, 0, narcs), STRING_ELT(temp, k));
SET_STRING_ELT(result, CMC(row, 1, narcs), STRING_ELT(temp, j));
row++;
SET_STRING_ELT(result, CMC(row, 0, narcs), STRING_ELT(temp, j));
SET_STRING_ELT(result, CMC(row, 1, narcs), STRING_ELT(temp, k));
row++;
//.........这里部分代码省略.........
示例2: bmerge_r
void bmerge_r(int xlowIn, int xuppIn, int ilowIn, int iuppIn, int col, int lowmax, int uppmax)
// col is >0 and <=ncol-1 if this range of [xlow,xupp] and [ilow,iupp] match up to but not including that column
// lowmax=1 if xlowIn is the lower bound of this group (needed for roll)
// uppmax=1 if xuppIn is the upper bound of this group (needed for roll)
{
int xlow=xlowIn, xupp=xuppIn, ilow=ilowIn, iupp=iuppIn, j, k, ir, lir, tmp;
SEXP class;
ir = lir = ilow + (iupp-ilow)/2; // lir = logical i row.
if (o) ir = o[lir]-1; // ir = the actual i row if i were ordered
ic = VECTOR_ELT(i,icols[col]-1); // ic = i column
xc = VECTOR_ELT(x,xcols[col]-1); // xc = x column
// it was checked in bmerge() that the types are equal
switch (TYPEOF(xc)) {
case LGLSXP : case INTSXP : // including factors
ival.i = INTEGER(ic)[ir];
while(xlow < xupp-1) {
mid = xlow + (xupp-xlow)/2; // Same as (xlow+xupp)/2 but without risk of overflow
xval.i = INTEGER(xc)[XIND(mid)];
if (xval.i<ival.i) { // relies on NA_INTEGER == INT_MIN, tested in init.c
xlow=mid;
} else if (xval.i>ival.i) { // TO DO: is *(&xlow, &xupp)[0|1]=mid more efficient than branch?
xupp=mid;
} else { // xval.i == ival.i including NA_INTEGER==NA_INTEGER
// branch mid to find start and end of this group in this column
// TO DO?: not if mult=first|last and col<ncol-1
tmplow = mid;
tmpupp = mid;
while(tmplow<xupp-1) {
mid = tmplow + (xupp-tmplow)/2;
xval.i = INTEGER(xc)[XIND(mid)];
if (xval.i == ival.i) tmplow=mid; else xupp=mid;
}
while(xlow<tmpupp-1) {
mid = xlow + (tmpupp-xlow)/2;
xval.i = INTEGER(xc)[XIND(mid)];
if (xval.i == ival.i) tmpupp=mid; else xlow=mid;
}
// xlow and xupp now surround the group in xc, we only need this range for the next column
break;
}
}
tmplow = lir;
tmpupp = lir;
while(tmplow<iupp-1) { // TO DO: could double up from lir rather than halving from iupp
mid = tmplow + (iupp-tmplow)/2;
xval.i = INTEGER(ic)[ o ? o[mid]-1 : mid ]; // reuse xval to search in i
if (xval.i == ival.i) tmplow=mid; else iupp=mid;
}
while(ilow<tmpupp-1) {
mid = ilow + (tmpupp-ilow)/2;
xval.i = INTEGER(ic)[ o ? o[mid]-1 : mid ];
if (xval.i == ival.i) tmpupp=mid; else ilow=mid;
}
// ilow and iupp now surround the group in ic, too
break;
case STRSXP :
ival.s = ENC2UTF8(STRING_ELT(ic,ir));
while(xlow < xupp-1) {
mid = xlow + (xupp-xlow)/2;
xval.s = ENC2UTF8(STRING_ELT(xc, XIND(mid)));
tmp = StrCmp(xval.s, ival.s); // uses pointer equality first, NA_STRING are allowed and joined to, then uses strcmp on CHAR().
if (tmp == 0) { // TO DO: deal with mixed encodings and locale optionally
tmplow = mid;
tmpupp = mid;
while(tmplow<xupp-1) {
mid = tmplow + (xupp-tmplow)/2;
xval.s = ENC2UTF8(STRING_ELT(xc, XIND(mid)));
if (ival.s == xval.s) tmplow=mid; else xupp=mid; // the == here handles encodings as well. Marked non-utf8 encodings are converted to utf-8 using ENC2UTF8.
}
while(xlow<tmpupp-1) {
mid = xlow + (tmpupp-xlow)/2;
xval.s = ENC2UTF8(STRING_ELT(xc, XIND(mid)));
if (ival.s == xval.s) tmpupp=mid; else xlow=mid; // see above re ==
}
break;
} else if (tmp < 0) {
xlow=mid;
} else {
xupp=mid;
}
}
tmplow = lir;
tmpupp = lir;
while(tmplow<iupp-1) {
mid = tmplow + (iupp-tmplow)/2;
xval.s = ENC2UTF8(STRING_ELT(ic, o ? o[mid]-1 : mid));
if (xval.s == ival.s) tmplow=mid; else iupp=mid; // see above re ==
}
while(ilow<tmpupp-1) {
mid = ilow + (tmpupp-ilow)/2;
xval.s = ENC2UTF8(STRING_ELT(ic, o ? o[mid]-1 : mid));
if (xval.s == ival.s) tmpupp=mid; else ilow=mid; // see above re ==
}
break;
case REALSXP :
class = getAttrib(xc, R_ClassSymbol);
twiddle = (isString(class) && STRING_ELT(class, 0)==char_integer64) ? &i64twiddle : &dtwiddle;
ival.ll = twiddle(DATAPTR(ic), ir, 1);
//.........这里部分代码省略.........
示例3: bmerge
SEXP bmerge(SEXP iArg, SEXP xArg, SEXP icolsArg, SEXP xcolsArg, SEXP isorted, SEXP rollarg, SEXP rollendsArg, SEXP nomatch, SEXP retFirstArg, SEXP retLengthArg, SEXP allLen1Arg)
{
int xN, iN, protecti=0;
roll = 0.0;
nearest = FALSE;
enc_warn = TRUE;
if (isString(rollarg)) {
if (strcmp(CHAR(STRING_ELT(rollarg,0)),"nearest") != 0) error("roll is character but not 'nearest'");
roll=1.0;
nearest=TRUE; // the 1.0 here is just any non-0.0, so roll!=0.0 can be used later
} else {
if (!isReal(rollarg)) error("Internal error: roll is not character or double");
roll = REAL(rollarg)[0]; // more common case (rolling forwards or backwards) or no roll when 0.0
}
rollabs = fabs(roll);
i = iArg;
x = xArg; // set globals so bmerge_r can see them.
if (!isInteger(icolsArg)) error("Internal error: icols is not integer vector");
if (!isInteger(xcolsArg)) error("Internal error: xcols is not integer vector");
if (LENGTH(icolsArg) > LENGTH(xcolsArg)) error("Internal error: length(icols) [%d] > length(xcols) [%d]", LENGTH(icolsArg), LENGTH(xcolsArg));
icols = INTEGER(icolsArg);
xcols = INTEGER(xcolsArg);
xN = LENGTH(VECTOR_ELT(x,0));
iN = LENGTH(VECTOR_ELT(i,0));
ncol = LENGTH(icolsArg); // there may be more sorted columns in x than involved in the join
for(int col=0; col<ncol; col++) {
if (icols[col]==NA_INTEGER) error("Internal error. icols[%d] is NA", col);
if (xcols[col]==NA_INTEGER) error("Internal error. xcols[%d] is NA", col);
if (icols[col]>LENGTH(i) || icols[col]<1) error("icols[%d]=%d outside range [1,length(i)=%d]", col, icols[col], LENGTH(i));
if (xcols[col]>LENGTH(x) || xcols[col]<1) error("xcols[%d]=%d outside range [1,length(x)=%d]", col, xcols[col], LENGTH(x));
int it = TYPEOF(VECTOR_ELT(i, icols[col]-1));
int xt = TYPEOF(VECTOR_ELT(x, xcols[col]-1));
if (it != xt) error("typeof x.%s (%s) != typeof i.%s (%s)", CHAR(STRING_ELT(getAttrib(x,R_NamesSymbol),xcols[col]-1)), type2char(xt), CHAR(STRING_ELT(getAttrib(i,R_NamesSymbol),icols[col]-1)), type2char(it));
}
if (!isInteger(retFirstArg) || LENGTH(retFirstArg)!=iN) error("retFirst must be integer vector the same length as nrow(i)");
retFirst = INTEGER(retFirstArg);
if (!isInteger(retLengthArg) || LENGTH(retLengthArg)!=iN) error("retLength must be integer vector the same length as nrow(i)");
retLength = INTEGER(retLengthArg);
if (!isLogical(allLen1Arg) || LENGTH(allLen1Arg) != 1) error("allLen1 must be a length 1 logical vector");
allLen1 = LOGICAL(allLen1Arg);
if (!isLogical(rollendsArg) || LENGTH(rollendsArg) != 2) error("rollends must be a length 2 logical vector");
rollends = LOGICAL(rollendsArg);
if (nearest && TYPEOF(VECTOR_ELT(i, icols[ncol-1]-1))==STRSXP) error("roll='nearest' can't be applied to a character column, yet.");
for (int j=0; j<iN; j++) {
// defaults need to populated here as bmerge_r may well not touch many locations, say if the last row of i is before the first row of x.
retFirst[j] = INTEGER(nomatch)[0]; // default to no match for NA goto below
// retLength[j] = 0; // TO DO: do this to save the branch below and later branches at R level to set .N to 0
retLength[j] = INTEGER(nomatch)[0]==0 ? 0 : 1;
}
allLen1[0] = TRUE; // All-0 and All-NA are considered all length 1 according to R code currently. Really, it means any(length>1).
o = NULL;
if (!LOGICAL(isorted)[0]) {
SEXP order = PROTECT(vec_init(length(icolsArg), ScalarInteger(1))); // rep(1, length(icolsArg))
SEXP oSxp = PROTECT(forder(i, icolsArg, ScalarLogical(FALSE), ScalarLogical(TRUE), order, ScalarLogical(FALSE)));
protecti += 2;
if (!LENGTH(oSxp)) o = NULL;
else o = INTEGER(oSxp);
}
if (iN) bmerge_r(-1,xN,-1,iN,0,1,1);
UNPROTECT(protecti);
return(R_NilValue);
}
示例4: c_unique_arcs
/* C-level interface to unique_arcs. */
SEXP c_unique_arcs(SEXP arcs, SEXP nodes, int warnlevel) {
int i = 0, j = 0, k = 0, nrows = 0, uniq_rows = 0, n = length(nodes);
int *checklist = NULL;
SEXP result, try, node, dup;
if (isNull(arcs)) {
/* use NULL as a special jolly value which returns all possible arcs
* given the specified node ordering. */
nrows = n * (n - 1)/2;
/* allocate the return value. */
PROTECT(result = allocMatrix(STRSXP, nrows, 2));
/* fill in the nodes' labels. */
for (i = 0; i < n; i++) {
node = STRING_ELT(nodes, i);
for (j = i + 1; j < n; j++) {
SET_STRING_ELT(result, CMC(k, 0, nrows), node);
SET_STRING_ELT(result, CMC(k, 1, nrows), STRING_ELT(nodes, j));
k++;
}/*FOR*/
}/*FOR*/
}/*THEN*/
else if (length(arcs) == 0) {
/* the arc set is empty, nothing to do. */
return arcs;
}/*THEN*/
else {
/* there really is a non-empty arc set, process it. */
nrows = length(arcs)/2;
/* match the node labels in the arc set. */
PROTECT(try = arc_hash(arcs, nodes, FALSE, FALSE));
/* check which are duplicated. */
PROTECT(dup = duplicated(try, FALSE));
checklist = INTEGER(dup);
/* count how many are not. */
for (i = 0; i < nrows; i++)
if (checklist[i] == 0)
uniq_rows++;
/* if there is no duplicate arc simply return the original arc set. */
if (uniq_rows == nrows) {
UNPROTECT(2);
return arcs;
}/*THEN*/
else {
/* warn the user if told to do so. */
if (warnlevel > 0)
warning("removed %d duplicate arcs.", nrows - uniq_rows);
/* allocate and initialize the return value. */
PROTECT(result = allocMatrix(STRSXP, uniq_rows, 2));
/* store the correct arcs in the return value. */
for (i = 0, k = 0; i < nrows; i++) {
if (checklist[i] == 0) {
SET_STRING_ELT(result, k, STRING_ELT(arcs, i));
SET_STRING_ELT(result, k + uniq_rows, STRING_ELT(arcs, i + nrows));
k++;
}/*THEN*/
}/*FOR*/
}/*ELSE*/
}/*ELSE*/
/* allocate, initialize and set the column names. */
finalize_arcs(result);
if (uniq_rows == 0)
UNPROTECT(1);
else
UNPROTECT(3);
return result;
}/*C_UNIQUE_ARCS*/
示例5: bn_recovery
/* check neighbourhood sets and markov blankets for consistency.. */
SEXP bn_recovery(SEXP bn, SEXP strict, SEXP mb, SEXP debug, SEXP filter) {
int i = 0, j = 0, k = 0, n = 0, counter = 0;
short int *checklist = NULL, err = 0;
int *debuglevel = NULL, *checkmb = NULL, *nbrfilter = NULL;
SEXP temp, temp2, nodes, elnames = NULL, fixed;
/* get the names of the nodes. */
nodes = getAttrib(bn, R_NamesSymbol);
n = LENGTH(nodes);
/* allocate and initialize the checklist. */
checklist = allocstatus(UPTRI_MATRIX(n));
/* dereference the debug, mb and filter parameters. */
debuglevel = LOGICAL(debug);
checkmb = LOGICAL(mb);
nbrfilter = INTEGER(filter);
if (*debuglevel > 0) {
Rprintf("----------------------------------------------------------------\n");
if (*checkmb)
Rprintf("* checking consistency of markov blankets.\n");
else
Rprintf("* checking consistency of neighbourhood sets.\n");
}/*THEN*/
/* scan the structure to determine the number of arcs. */
for (i = 0; i < n; i++) {
if (*debuglevel > 0)
Rprintf(" > checking node %s.\n", NODE(i));
/* get the entry for the (neighbours|elements of the markov blanket)
of the node.*/
temp = getListElement(bn, (char *)NODE(i));
if (!(*checkmb))
temp = getListElement(temp, "nbr");
/* check each element of the array and identify which variable it
corresponds to. */
for (j = 0; j < LENGTH(temp); j++) {
for (k = 0; k < n; k++) {
/* increment the right element of checklist. */
if (!strcmp(NODE(k), (char *)CHAR(STRING_ELT(temp, j))))
checklist[UPTRI(i + 1, k + 1, n)]++;
}/*FOR*/
}/*FOR*/
}/*FOR*/
/* if A is a neighbour of B, B is a neighbour of A; therefore each entry in
* the checklist array must be equal to either zero (if the corresponding
* nodes are not neighbours) or two (if the corresponding nodes are neighbours).
* Any other value (typically one) is caused by an incorrect (i.e. asymmetric)
* neighbourhood structure. The same logic holds for the markov blankets. */
for (i = 0; i < n; i++)
for (j = i; j < n; j++) {
if ((checklist[UPTRI(i + 1, j + 1, n)] != 0) &&
(checklist[UPTRI(i + 1, j + 1, n)] != 2)) {
if (*debuglevel > 0) {
if (*checkmb)
Rprintf("@ asymmetry in the markov blankets for %s and %s.\n",
NODE(i), NODE(j));
else
Rprintf("@ asymmetry in the neighbourhood sets for %s and %s.\n",
NODE(i), NODE(j));
}/*THEN*/
err = 1;
}/*THEN*/
}/*FOR*/
/* no need to go on if the (neighbourhood sets|markov blankets) are symmetric;
* otherwise throw either an error or a warning according to the value of the
* strict parameter. */
if (!err) {
return bn;
}/*THEN*/
else if (isTRUE(strict)) {
if (*checkmb)
error("markov blankets are not symmetric.\n");
else
//.........这里部分代码省略.........
示例6: RChar2String
std::string RChar2String(SEXP str)
{
return string(CHAR(STRING_ELT(str, 0)));
}
示例7: extract_col
SEXP extract_col (SEXP x, SEXP j, SEXP drop, SEXP first_, SEXP last_) {
SEXP result, index, new_index;
int nrs, nrsx, i, ii, jj, first, last;
nrsx = nrows(x);
first = asInteger(first_)-1;
last = asInteger(last_)-1;
/* nrs = offset_end - offset_start - 1; */
nrs = last - first + 1;
PROTECT(result = allocVector(TYPEOF(x), nrs * length(j)));
switch(TYPEOF(x)) {
case REALSXP:
for(i=0; i<length(j); i++) {
/*
Rprintf("j + i*nrs + first=%i\n", (int)(INTEGER(j)[i]-1 + i*nrs + first));
Rprintf("i=%i, j=%i, nrs=%i, first=%i\n", i, INTEGER(j)[i]-1, nrs, first);
*/
if(INTEGER(j)[i] == NA_INTEGER) {
for(ii=0; ii < nrs; ii++) {
REAL(result)[(i*nrs) + ii] = NA_REAL;
}
} else {
memcpy(&(REAL(result)[i*nrs]),
&(REAL(x)[(INTEGER(j)[i]-1)*nrsx + first]),
nrs*sizeof(double));
}
}
break;
case INTSXP:
for(i=0; i<length(j); i++) {
if(INTEGER(j)[i] == NA_INTEGER) {
for(ii=0; ii < nrs; ii++) {
INTEGER(result)[(i*nrs) + ii] = NA_INTEGER;
}
} else {
memcpy(&(INTEGER(result)[i*nrs]),
&(INTEGER(x)[(INTEGER(j)[i]-1)*nrsx + first]),
nrs*sizeof(int));
}
}
break;
case LGLSXP:
for(i=0; i<length(j); i++) {
if(INTEGER(j)[i] == NA_INTEGER) {
for(ii=0; ii < nrs; ii++) {
LOGICAL(result)[(i*nrs) + ii] = NA_LOGICAL;
}
} else {
memcpy(&(LOGICAL(result)[i*nrs]),
&(LOGICAL(x)[(INTEGER(j)[i]-1)*nrsx + first]),
nrs*sizeof(int));
}
}
break;
case CPLXSXP:
for(i=0; i<length(j); i++) {
if(INTEGER(j)[i] == NA_INTEGER) {
for(ii=0; ii < nrs; ii++) {
COMPLEX(result)[(i*nrs) + ii].r = NA_REAL;
COMPLEX(result)[(i*nrs) + ii].i = NA_REAL;
}
} else {
memcpy(&(COMPLEX(result)[i*nrs]),
&(COMPLEX(x)[(INTEGER(j)[i]-1)*nrsx + first]),
nrs*sizeof(Rcomplex));
}
}
break;
case RAWSXP:
for(i=0; i<length(j); i++) {
if(INTEGER(j)[i] == NA_INTEGER) {
for(ii=0; ii < nrs; ii++) {
RAW(result)[(i*nrs) + ii] = 0;
}
} else {
memcpy(&(RAW(result)[i*nrs]),
&(RAW(x)[(INTEGER(j)[i]-1)*nrsx + first]),
nrs*sizeof(Rbyte));
}
}
break;
case STRSXP:
for(jj=0; jj<length(j); jj++) {
if(INTEGER(j)[jj] == NA_INTEGER) {
for(i=0; i< nrs; i++)
SET_STRING_ELT(result, i+jj*nrs, NA_STRING);
} else {
for(i=0; i< nrs; i++)
SET_STRING_ELT(result, i+jj*nrs, STRING_ELT(x, i+(INTEGER(j)[jj]-1)*nrsx+first));
}
}
break;
default:
error("unsupported type");
}
//.........这里部分代码省略.........
示例8: f
SEXP gbm
(
SEXP radY, // outcome or response
SEXP radOffset, // offset for f(x), NA for no offset
SEXP radX,
SEXP raiXOrder,
SEXP radWeight,
SEXP radMisc, // other row specific data (eg failure time), NA=no Misc
SEXP rcRows,
SEXP rcCols,
SEXP racVarClasses,
SEXP ralMonotoneVar,
SEXP rszFamily,
SEXP rcTrees,
SEXP rcDepth, // interaction depth
SEXP rcMinObsInNode,
SEXP rdShrinkage,
SEXP rdBagFraction,
SEXP rcTrain,
SEXP radFOld,
SEXP rcCatSplitsOld,
SEXP rcTreesOld,
SEXP rfVerbose
)
{
unsigned long hr = 0;
SEXP rAns = NULL;
SEXP rNewTree = NULL;
SEXP riSplitVar = NULL;
SEXP rdSplitPoint = NULL;
SEXP riLeftNode = NULL;
SEXP riRightNode = NULL;
SEXP riMissingNode = NULL;
SEXP rdErrorReduction = NULL;
SEXP rdWeight = NULL;
SEXP rdPred = NULL;
SEXP rdInitF = NULL;
SEXP radF = NULL;
SEXP radTrainError = NULL;
SEXP radValidError = NULL;
SEXP radOOBagImprove = NULL;
SEXP rSetOfTrees = NULL;
SEXP rSetSplitCodes = NULL;
SEXP rSplitCode = NULL;
VEC_VEC_CATEGORIES vecSplitCodes;
int i = 0;
int iT = 0;
int cTrees = INTEGER(rcTrees)[0];
const int cResultComponents = 7;
// rdInitF, radF, radTrainError, radValidError, radOOBagImprove
// rSetOfTrees, rSetSplitCodes
const int cTreeComponents = 8;
// riSplitVar, rdSplitPoint, riLeftNode,
// riRightNode, riMissingNode, rdErrorReduction, rdWeight, rdPred
int cNodes = 0;
int cTrain = INTEGER(rcTrain)[0];
double dTrainError = 0.0;
double dValidError = 0.0;
double dOOBagImprove = 0.0;
CGBM *pGBM = NULL;
CDataset *pData = NULL;
CDistribution *pDist = NULL;
// set up the dataset
pData = new CDataset();
if(pData==NULL)
{
hr = GBM_OUTOFMEMORY;
goto Error;
}
// initialize R's random number generator
GetRNGstate();
// initialize some things
hr = gbm_setup(REAL(radY),
REAL(radOffset),
REAL(radX),
INTEGER(raiXOrder),
REAL(radWeight),
REAL(radMisc),
INTEGER(rcRows)[0],
INTEGER(rcCols)[0],
INTEGER(racVarClasses),
INTEGER(ralMonotoneVar),
CHAR(STRING_ELT(rszFamily,0)),
INTEGER(rcTrees)[0],
INTEGER(rcDepth)[0],
INTEGER(rcMinObsInNode)[0],
REAL(rdShrinkage)[0],
REAL(rdBagFraction)[0],
INTEGER(rcTrain)[0],
pData,
//.........这里部分代码省略.........
示例9: dtrMatrix_dtrMatrix_mm
/** Matrix products of dense triangular Matrices
*
* @param a triangular matrix of class "dtrMatrix"
* @param b ( ditto )
* @param right logical, if true, compute b %*% a, else a %*% b
* @param trans logical, if true, "transpose a", i.e., use t(a), otherwise a
*
* @return the matrix product, one of a %*% b, t(a) %*% b, b %*% a, or b %*% t(a)
* depending on (right, trans) = (F, F) (F, T) (T, F) (T, T)
*/
SEXP dtrMatrix_dtrMatrix_mm(SEXP a, SEXP b, SEXP right, SEXP trans)
{
/* called from "%*%" : (x,y, FALSE,FALSE),
crossprod() : (x,y, FALSE, TRUE) , and
tcrossprod(): (y,x, TRUE , TRUE)
* -
* TWO cases : (1) result is triangular <=> uplo's "match" (i.e., non-equal iff trans)
* === (2) result is "general"
*/
SEXP val,/* = in case (2): PROTECT(dup_mMatrix_as_dgeMatrix(b)); */
d_a = GET_SLOT(a, Matrix_DimSym),
uplo_a = GET_SLOT(a, Matrix_uploSym), diag_a = GET_SLOT(a, Matrix_diagSym),
uplo_b = GET_SLOT(b, Matrix_uploSym), diag_b = GET_SLOT(b, Matrix_diagSym);
int rt = asLogical(right);
int tr = asLogical(trans);
int *adims = INTEGER(d_a), n = adims[0];
double *valx = (double *) NULL /*Wall*/;
const char
*uplo_a_ch = CHAR(STRING_ELT(uplo_a, 0)), /* = uplo_P(a) */
*diag_a_ch = CHAR(STRING_ELT(diag_a, 0)), /* = diag_P(a) */
*uplo_b_ch = CHAR(STRING_ELT(uplo_b, 0)), /* = uplo_P(b) */
*diag_b_ch = CHAR(STRING_ELT(diag_b, 0)); /* = diag_P(b) */
Rboolean same_uplo = (*uplo_a_ch == *uplo_b_ch),
matching_uplo = tr ? (!same_uplo) : same_uplo,
uDiag_b = /* -Wall: */ FALSE;
if (INTEGER(GET_SLOT(b, Matrix_DimSym))[0] != n)
/* validity checking already "assures" square matrices ... */
error(_("\"dtrMatrix\" objects in '%*%' must have matching (square) dimension"));
if(matching_uplo) {
/* ==> result is triangular -- "dtrMatrix" !
* val := dup_mMatrix_as_dtrMatrix(b) : */
int sz = n * n;
val = PROTECT(NEW_OBJECT(MAKE_CLASS("dtrMatrix")));
SET_SLOT(val, Matrix_uploSym, duplicate(uplo_b));
SET_SLOT(val, Matrix_DimSym, duplicate(d_a));
SET_DimNames(val, b);
valx = REAL(ALLOC_SLOT(val, Matrix_xSym, REALSXP, sz));
Memcpy(valx, REAL(GET_SLOT(b, Matrix_xSym)), sz);
if((uDiag_b = (*diag_b_ch == 'U'))) {
/* unit-diagonal b - may contain garbage in diagonal */
for (int i = 0; i < n; i++)
valx[i * (n+1)] = 1.;
}
} else { /* different "uplo" ==> result is "dgeMatrix" ! */
val = PROTECT(dup_mMatrix_as_dgeMatrix(b));
SEXP
dn_a = GET_SLOT( a , Matrix_DimNamesSym),
dn = GET_SLOT(val, Matrix_DimNamesSym);
/* matrix product a %*% b, t(a) %*% b, b %*% a, or b %*% t(a)
* (right, trans) = (F, F) (F, T) (T, F) (T, T)
* set:from_a = 0:0 0:1 1:1 1:0
*/
SET_VECTOR_ELT(dn, rt ? 1 : 0, VECTOR_ELT(dn_a, (rt+tr) % 2));
}
if (n >= 1) {
double alpha = 1.;
/* Level 3 BLAS - DTRMM(): Compute one of the matrix multiplication operations
* B := alpha*op( A )*B ["L"], or B := alpha*B*op( A ) ["R"],
* where trans_A determines op(A):= A "N"one or
* op(A):= t(A) "T"ransposed */
F77_CALL(dtrmm)(rt ? "R" : "L", uplo_a_ch,
/*trans_A = */ tr ? "T" : "N", diag_a_ch, &n, &n, &alpha,
REAL(GET_SLOT(a, Matrix_xSym)), adims,
REAL(GET_SLOT(val, Matrix_xSym)), &n);
}
if(matching_uplo) {
make_d_matrix_triangular(valx, tr ? b : a); /* set "other triangle" to 0 */
if(*diag_a_ch == 'U' && uDiag_b) /* result remains uni-diagonal */
SET_SLOT(val, Matrix_diagSym, duplicate(diag_a));
}
UNPROTECT(1);
return val;
}
示例10: r_strptr
SEXP r_strptr(SEXP x)
{
return R_MakeExternalPtr( (void*) CHAR(STRING_ELT(x, 0)), R_NilValue, x );
}
示例11: scanVector
static SEXP scanVector(SEXPTYPE type, int maxitems, int maxlines,
int flush, SEXP stripwhite, int blskip, LocalData *d)
{
SEXP ans, bns;
int blocksize, c, i, n, linesread, nprev,strip, bch;
char *buffer;
R_StringBuffer strBuf = {NULL, 0, MAXELTSIZE};
if (maxitems > 0) blocksize = maxitems;
else blocksize = SCAN_BLOCKSIZE;
R_AllocStringBuffer(0, &strBuf);
PROTECT(ans = allocVector(type, blocksize));
nprev = 0; n = 0; linesread = 0; bch = 1;
if (d->ttyflag) sprintf(ConsolePrompt, "1: ");
strip = asLogical(stripwhite);
for (;;) {
if(n % 10000 == 9999) R_CheckUserInterrupt();
if (bch == R_EOF) {
if (d->ttyflag) R_ClearerrConsole();
break;
}
else if (bch == '\n') {
linesread++;
if (linesread == maxlines)
break;
if (d->ttyflag) sprintf(ConsolePrompt, "%d: ", n + 1);
nprev = n;
}
if (n == blocksize) {
/* enlarge the vector*/
bns = ans;
if(blocksize > INT_MAX/2) error(_("too many items"));
blocksize = 2 * blocksize;
ans = allocVector(type, blocksize);
UNPROTECT(1);
PROTECT(ans);
copyVector(ans, bns);
}
buffer = fillBuffer(type, strip, &bch, d, &strBuf);
if (nprev == n && strlen(buffer)==0 &&
((blskip && bch =='\n') || bch == R_EOF)) {
if (d->ttyflag || bch == R_EOF)
break;
}
else {
extractItem(buffer, ans, n, d);
if (++n == maxitems) {
if (d->ttyflag && bch != '\n') { /* MBCS-safe */
while ((c = scanchar(FALSE, d)) != '\n')
;
}
break;
}
}
if (flush && (bch != '\n') && (bch != R_EOF)) { /* MBCS-safe */
while ((c = scanchar(FALSE, d)) != '\n' && (c != R_EOF));
bch = c;
}
}
if (!d->quiet) REprintf("Read %d item%s\n", n, (n == 1) ? "" : "s");
if (d->ttyflag) ConsolePrompt[0] = '\0';
if (n == 0) {
UNPROTECT(1);
R_FreeStringBuffer(&strBuf);
return allocVector(type,0);
}
if (n == maxitems) {
UNPROTECT(1);
R_FreeStringBuffer(&strBuf);
return ans;
}
bns = allocVector(type, n);
switch (type) {
case LGLSXP:
case INTSXP:
for (i = 0; i < n; i++)
INTEGER(bns)[i] = INTEGER(ans)[i];
break;
case REALSXP:
for (i = 0; i < n; i++)
REAL(bns)[i] = REAL(ans)[i];
break;
case CPLXSXP:
for (i = 0; i < n; i++)
COMPLEX(bns)[i] = COMPLEX(ans)[i];
break;
case STRSXP:
for (i = 0; i < n; i++)
SET_STRING_ELT(bns, i, STRING_ELT(ans, i));
break;
case RAWSXP:
for (i = 0; i < n; i++)
RAW(bns)[i] = RAW(ans)[i];
//.........这里部分代码省略.........
示例12: git2r_note_create
/**
* Add a note for an object
*
* @param repo S4 class git_repository
* @param sha The sha string of object
* @param commit S4 class git_commit
* @param message Content of the note to add
* @param ref Canonical name of the reference to use
* @param author Signature of the notes note author
* @param committer Signature of the notes note committer
* @param force Overwrite existing note
* @return S4 class git_note
*/
SEXP git2r_note_create(
SEXP repo,
SEXP sha,
SEXP message,
SEXP ref,
SEXP author,
SEXP committer,
SEXP force)
{
int err;
SEXP result = R_NilValue;
int overwrite = 0;
git_oid note_oid;
git_oid object_oid;
git_signature *sig_author = NULL;
git_signature *sig_committer = NULL;
git_repository *repository = NULL;
if (git2r_arg_check_sha(sha))
git2r_error(git2r_err_sha_arg, __func__, "sha");
if (git2r_arg_check_string(message))
git2r_error(git2r_err_string_arg, __func__, "message");
if (git2r_arg_check_string(ref))
git2r_error(git2r_err_string_arg, __func__, "ref");
if (git2r_arg_check_signature(author))
git2r_error(git2r_err_signature_arg, __func__, "author");
if (git2r_arg_check_signature(committer))
git2r_error(git2r_err_signature_arg, __func__, "committer");
if (git2r_arg_check_logical(force))
git2r_error(git2r_err_logical_arg, __func__, "force");
repository = git2r_repository_open(repo);
if (!repository)
git2r_error(git2r_err_invalid_repository, __func__, NULL);
err = git2r_signature_from_arg(&sig_author, author);
if (GIT_OK != err)
goto cleanup;
err = git2r_signature_from_arg(&sig_committer, committer);
if (GIT_OK != err)
goto cleanup;
err = git_oid_fromstr(&object_oid, CHAR(STRING_ELT(sha, 0)));
if (GIT_OK != err)
goto cleanup;
if (LOGICAL(force)[0])
overwrite = 1;
err = git_note_create(
¬e_oid,
repository,
CHAR(STRING_ELT(ref, 0)),
sig_author,
sig_committer,
&object_oid,
CHAR(STRING_ELT(message, 0)),
overwrite);
if (GIT_OK != err)
goto cleanup;
PROTECT(result = NEW_OBJECT(MAKE_CLASS("git_note")));
err = git2r_note_init(¬e_oid,
&object_oid,
repository,
CHAR(STRING_ELT(ref, 0)),
repo,
result);
cleanup:
if (sig_author)
git_signature_free(sig_author);
if (sig_committer)
git_signature_free(sig_committer);
if (repository)
git_repository_free(repository);
if (R_NilValue != result)
UNPROTECT(1);
if (GIT_OK != err)
git2r_error(git2r_err_from_libgit2, __func__, giterr_last()->message);
return result;
//.........这里部分代码省略.........
示例13: cache_node_structure
//.........这里部分代码省略.........
}/*ELSE*/
}/*FOR*/
/* count how may nodes fall in each category. */
for (i = 0; i < nrows; i++) {
switch(status[i]) {
case CHILD:
/* a child is also a neighbour and belongs into the markov blanket. */
num_children++;
num_neighbours++;
num_blanket++;
break;
case PARENT:
/* the same goes for a parent. */
num_parents++;
num_neighbours++;
num_blanket++;
break;
case NEIGHBOUR:
/* it's not known if this is parent or a children, but it's certainly a neighbour. */
num_neighbours++;
num_blanket++;
break;
case BLANKET:
num_blanket++;
break;
default:
/* this node is not even in the markov blanket. */
break;
}/*SWITCH*/
}/*FOR*/
if (debuglevel > 0)
Rprintf(" > node %s has %d parent(s), %d child(ren), %d neighbour(s) and %d nodes in the markov blanket.\n",
NODE(cur), num_parents, num_children, num_neighbours, num_blanket);
/* allocate and initialize the names of the elements. */
PROTECT(names = allocVector(STRSXP, 4));
SET_STRING_ELT(names, 0, mkChar("mb"));
SET_STRING_ELT(names, 1, mkChar("nbr"));
SET_STRING_ELT(names, 2, mkChar("parents"));
SET_STRING_ELT(names, 3, mkChar("children"));
/* allocate the list and set its attributes. */
PROTECT(structure = allocVector(VECSXP, 4));
setAttrib(structure, R_NamesSymbol, names);
/* allocate and fill the "children" element of the list. */
PROTECT(children = allocVector(STRSXP, num_children));
for (i = 0, j = 0; (i < nrows) && (j < num_children); i++) {
if (status[i] == CHILD)
SET_STRING_ELT(children, j++, STRING_ELT(nodes, i));
}/*FOR*/
/* allocate and fill the "parents" element of the list. */
PROTECT(parents = allocVector(STRSXP, num_parents));
for (i = 0, j = 0; (i < nrows) && (j < num_parents); i++) {
if (status[i] == PARENT)
SET_STRING_ELT(parents, j++, STRING_ELT(nodes, i));
}/*FOR*/
/* allocate and fill the "nbr" element of the list. */
PROTECT(nbr = allocVector(STRSXP, num_neighbours));
for (i = 0, j = 0; (i < nrows) && (j < num_neighbours); i++) {
if (status[i] >= NEIGHBOUR)
SET_STRING_ELT(nbr, j++, STRING_ELT(nodes, i));
}/*FOR*/
/* allocate and fill the "mb" element of the list. */
PROTECT(mb = allocVector(STRSXP, num_blanket));
for (i = 0, j = 0; (i < nrows) && (j < num_blanket + num_neighbours); i++) {
if (status[i] >= BLANKET)
SET_STRING_ELT(mb, j++, STRING_ELT(nodes, i));
}/*FOR*/
/* attach the string vectors to the list. */
SET_VECTOR_ELT(structure, 0, mb);
SET_VECTOR_ELT(structure, 1, nbr);
SET_VECTOR_ELT(structure, 2, parents);
SET_VECTOR_ELT(structure, 3, children);
UNPROTECT(6);
return structure;
}/*CACHE_NODE_STRUCTURE*/
示例14: c_dfRowsToList
SEXP c_dfRowsToList(SEXP s_df, SEXP s_pars, SEXP s_types, SEXP s_parnames, SEXP s_lens, SEXP s_cnames) {
int *types = INTEGER(s_types);
int npars = LENGTH(s_lens);
int *lens = INTEGER(s_lens);
int nrow_df = LENGTH(VECTOR_ELT(s_df, 0));
int row, par, k; /* loop counters for rows, cols, params, vector param elements */
int type; /* type of column we are currently handling */
int parlen; /* length of param we are currently handling */
int colcount = 0; /* when we iterate params, what is the (first) column of s_df that corresponds? */
SEXP s_res, s_rowlist, s_parval, s_call;
Rboolean all_missing;
/* we iterate thru rows then params. */
s_res = PROTECT(NEW_LIST(nrow_df));
s_call = PROTECT(lang3(install("discreteNameToValue"), R_NilValue, R_NilValue));
for (row = 0; row < nrow_df; row++) {
s_rowlist = PROTECT(NEW_LIST(npars));
/* convert row to R objects and define them in envir s_env */
colcount = 0;
for (par = 0; par < npars; par++) { /* iter thru params */
parlen = lens[par];
type = types[colcount];
all_missing = TRUE;
/* copy vector-param block of row to s_parval */
if (type == 1) { /* numerics */
s_parval = PROTECT(NEW_NUMERIC(parlen));
for (k = 0; k < parlen; k++) {
REAL(s_parval)[k] = REAL(VECTOR_ELT(s_df, colcount+k))[row];
if (!ISNAN(REAL(s_parval)[k]))
all_missing = FALSE;
}
} else if (type == 2) { /* integers */
s_parval = PROTECT(NEW_INTEGER(parlen));
for (k = 0; k < parlen; k++) {
INTEGER(s_parval)[k] = INTEGER(VECTOR_ELT(s_df, colcount+k))[row];
if (INTEGER(s_parval)[k] != NA_INTEGER)
all_missing = FALSE;
}
} else if (type == 3) { /* factors */
s_parval = PROTECT(NEW_CHARACTER(parlen));
for (k = 0; k < parlen; k++) {
SET_STRING_ELT(s_parval, k, STRING_ELT(VECTOR_ELT(s_df, colcount+k), row));
if (STRING_ELT(s_parval, k) != NA_STRING)
all_missing = FALSE;
}
} else if (type == 4) { /* logical */
s_parval = PROTECT(NEW_LOGICAL(parlen));
for (k = 0; k < parlen; k++) {
LOGICAL(s_parval)[k] = LOGICAL(VECTOR_ELT(s_df, colcount+k))[row];
if (LOGICAL(s_parval)[k] != NA_LOGICAL)
all_missing = FALSE;
}
} else if (type == 5) { /* character */
s_parval = PROTECT(NEW_CHARACTER(parlen));
for (k = 0; k < parlen; k++) {
SET_STRING_ELT(s_parval, k, STRING_ELT(VECTOR_ELT(s_df, colcount+k), row));
if (STRING_ELT(s_parval, k) != NA_STRING)
all_missing = FALSE;
}
}
/* are all entries in s_parval NA ? */
if (all_missing)
s_parval = ScalarLogical(NA_LOGICAL);
/* convert discrete names to values */
if (!all_missing && type == 3) {
SETCADR(s_call, VECTOR_ELT(s_pars, par));
SETCADDR(s_call, s_parval);
s_parval = PROTECT(eval(s_call, R_GlobalEnv));
UNPROTECT(1); /* eval */
}
/* only support for cnames for num, int, log and char vecs currently */
if (type == 1 || type == 2 || type == 4 || type == 5)
SET_NAMES(s_parval, VECTOR_ELT(s_cnames, par));
SET_VECTOR_ELT(s_rowlist, par, s_parval);
SET_NAMES(s_rowlist, s_parnames);
colcount += parlen;
UNPROTECT(1); /* s_parval */
}
SET_VECTOR_ELT(s_res, row, s_rowlist);
UNPROTECT(1); /* s_rowlist */
}
UNPROTECT(2); /* s_res, s_call */
return s_res;
}
示例15: GetProcAddress
/* GetNativeSystemInfo is XP or later */
pGNSI = (PGNSI)
GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),
"GetNativeSystemInfo");
if(NULL != pGNSI) pGNSI(&si); else GetSystemInfo(&si);
if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
strcat(ver, " x64");
}
SET_STRING_ELT(ans, 1, mkChar(ver));
if((int)osvi.dwMajorVersion >= 5) {
if(osvi.wServicePackMajor > 0)
snprintf(ver, 256, "build %d, Service Pack %d",
LOWORD(osvi.dwBuildNumber),
(int) osvi.wServicePackMajor);
else snprintf(ver, 256, "build %d", LOWORD(osvi.dwBuildNumber));
} else
snprintf(ver, 256, "build %d, %s",
LOWORD(osvi.dwBuildNumber), osvi.szCSDVersion);
SET_STRING_ELT(ans, 2, mkChar(ver));
GetComputerNameW(name, &namelen);
wcstoutf8(buf, name, 1000);
SET_STRING_ELT(ans, 3, mkCharCE(buf, CE_UTF8));
#ifdef WIN64
SET_STRING_ELT(ans, 4, mkChar("x86-64"));
#else
SET_STRING_ELT(ans, 4, mkChar("x86"));
#endif
GetUserNameW(user, &userlen);
wcstoutf8(buf, user, 1000);
SET_STRING_ELT(ans, 5, mkCharCE(buf, CE_UTF8));
SET_STRING_ELT(ans, 6, STRING_ELT(ans, 5));
SET_STRING_ELT(ans, 7, STRING_ELT(ans, 5));
PROTECT(ansnames = allocVector(STRSXP, 8));
SET_STRING_ELT(ansnames, 0, mkChar("sysname"));
SET_STRING_ELT(ansnames, 1, mkChar("release"));
SET_STRING_ELT(ansnames, 2, mkChar("version"));
SET_STRING_ELT(ansnames, 3, mkChar("nodename"));
SET_STRING_ELT(ansnames, 4, mkChar("machine"));
SET_STRING_ELT(ansnames, 5, mkChar("login"));
SET_STRING_ELT(ansnames, 6, mkChar("user"));
SET_STRING_ELT(ansnames, 7, mkChar("effective_user"));
setAttrib(ans, R_NamesSymbol, ansnames);
UNPROTECT(2);
return ans;
}
SEXP do_syssleep(SEXP call, SEXP op, SEXP args, SEXP rho)
{
DWORD mtime;
int ntime;
double time;
checkArity(op, args);
time = asReal(CAR(args));
if (ISNAN(time) || time < 0)
errorcall(call, _("invalid '%s' value"), "time");
ntime = 1000*(time) + 0.5;
while (ntime > 0) {
mtime = min(500, ntime);
ntime -= mtime;
Sleep(mtime);
R_ProcessEvents();
}
return R_NilValue;
}
#ifdef LEA_MALLOC
#define MALLINFO_FIELD_TYPE size_t
struct mallinfo {
MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */
MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */
MALLINFO_FIELD_TYPE smblks; /* number of fastbin blocks */
MALLINFO_FIELD_TYPE hblks; /* number of mmapped regions */
MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */
MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */
MALLINFO_FIELD_TYPE fsmblks; /* space available in freed fastbin blocks */
MALLINFO_FIELD_TYPE uordblks; /* total allocated space */
MALLINFO_FIELD_TYPE fordblks; /* total free space */
MALLINFO_FIELD_TYPE keepcost; /* top-most, releasable (via malloc_trim) space */
};
extern R_size_t R_max_memory;
struct mallinfo mallinfo(void);
#endif
SEXP in_memsize(SEXP ssize)
{
SEXP ans;
int maxmem = NA_LOGICAL;
if(isLogical(ssize))
maxmem = asLogical(ssize);
else if(isReal(ssize)) {
R_size_t newmax;
double mem = asReal(ssize);
if (!R_FINITE(mem))
error(_("incorrect argument"));
#ifdef LEA_MALLOC
#ifndef WIN64
//.........这里部分代码省略.........