The R Project SVN R-packages

Rev

Rev 6391 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

/*
 * count up the number of nodes and splits in the final result
 *
 *  Gather the counts for myself, add in those of my children, and
 *    pass the total back to my parent
 */
#include "rpart.h"
#include "node.h"
#include "rpartproto.h"

void
rpcountup(pNode me, int *nnode, int *nsplit, int *ncat)
{
    int node2, split2;
    int cat2;
    int i, j, k;
    pSplit ss;

    if (me->complexity <= rp.alpha || me->leftson == 0) {       /* no kids */
    *nnode = 1;
    *nsplit = 0;
    *ncat = 0;
    } else {
    i = 0;
    j = 0;
    k = 0;
    for (ss = me->primary; ss; ss = ss->nextsplit) {
        i++;
        if (rp.numcat[ss->var_num] > 0)
        k++;
    }
    for (ss = me->surrogate; ss; ss = ss->nextsplit) {
        j++;
        if (rp.numcat[ss->var_num] > 0)
        k++;
    }

    rpcountup(me->leftson, nnode, nsplit, ncat);
    rpcountup(me->rightson, &node2, &split2, &cat2);
    *nnode += 1 + node2;
    *nsplit += i + j + split2;
    *ncat += k + cat2;
    }
}