The R Project SVN R

Rev

Rev 7701 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7701 Rev 10172
Line 57... Line 57...
57
    /* Allocate a generic vector to hold the results. */
57
    /* Allocate a generic vector to hold the results. */
58
    /* The i-th element will hold the split-out data */
58
    /* The i-th element will hold the split-out data */
59
    /* for the ith group. */
59
    /* for the ith group. */
60
    PROTECT(vec = allocVector(VECSXP, nlevs));
60
    PROTECT(vec = allocVector(VECSXP, nlevs));
61
    for (i = 0;  i< nlevs; i++) {
61
    for (i = 0;  i< nlevs; i++) {
62
	VECTOR(vec)[i] = allocVector(TYPEOF(x), INTEGER(counts)[i]);
62
	SET_VECTOR_ELT(vec, i, allocVector(TYPEOF(x), INTEGER(counts)[i]));
63
	setAttrib(VECTOR(vec)[i], R_LevelsSymbol,
63
	setAttrib(VECTOR_ELT(vec, i), R_LevelsSymbol,
64
		  getAttrib(x, R_LevelsSymbol));
64
		  getAttrib(x, R_LevelsSymbol));
65
    }
65
    }
66
    for (i = 0; i < nlevs; i++)
66
    for (i = 0; i < nlevs; i++)
67
	INTEGER(counts)[i] = 0;
67
	INTEGER(counts)[i] = 0;
68
    for (i = 0;  i< nobs; i++) {
68
    for (i = 0;  i< nobs; i++) {
Line 70... Line 70...
70
	if (j != NA_INTEGER) {
70
	if (j != NA_INTEGER) {
71
	    k = INTEGER(counts)[j - 1];
71
	    k = INTEGER(counts)[j - 1];
72
	    switch (TYPEOF(x)) {
72
	    switch (TYPEOF(x)) {
73
	    case LGLSXP:
73
	    case LGLSXP:
74
	    case INTSXP:
74
	    case INTSXP:
75
		INTEGER(VECTOR(vec)[j - 1])[k] = INTEGER(x)[i];
75
		INTEGER(VECTOR_ELT(vec, j - 1))[k] = INTEGER(x)[i];
76
		break;
76
		break;
77
	    case REALSXP:
77
	    case REALSXP:
78
		REAL(VECTOR(vec)[j - 1])[k] = REAL(x)[i];
78
		REAL(VECTOR_ELT(vec, j - 1))[k] = REAL(x)[i];
79
		break;
79
		break;
80
	    case CPLXSXP:
80
	    case CPLXSXP:
81
		COMPLEX(VECTOR(vec)[j - 1])[k] = COMPLEX(x)[i];
81
		COMPLEX(VECTOR_ELT(vec, j - 1))[k] = COMPLEX(x)[i];
82
		break;
82
		break;
83
	    case STRSXP:
83
	    case STRSXP:
84
		STRING(VECTOR(vec)[j - 1])[k] = STRING(x)[i];
84
		SET_STRING_ELT(VECTOR_ELT(vec, j - 1), k, STRING_ELT(x, i));
85
		break;
85
		break;
86
	    }
86
	    }
87
	    INTEGER(counts)[j - 1] += 1;
87
	    INTEGER(counts)[j - 1] += 1;
88
	}
88
	}
89
    }
89
    }