/* EncodeElement is called by cat(), write.table() and deparsing. */ const char *EncodeElement(SEXP x, int indx, int quote, char dec) { int w, d, e, wi, di, ei; const char *res; switch(TYPEOF(x)) { case LGLSXP: formatLogical(&LOGICAL(x)[indx], 1, &w); res = EncodeLogical(LOGICAL(x)[indx], w); break; case INTSXP: formatInteger(&INTEGER(x)[indx], 1, &w); res = EncodeInteger(INTEGER(x)[indx], w); break; case REALSXP: formatReal(&REAL(x)[indx], 1, &w, &d, &e, 0); res = EncodeReal(REAL(x)[indx], w, d, e, dec); break; case STRSXP: formatString(&STRING_PTR(x)[indx], 1, &w, quote); res = EncodeString(STRING_ELT(x, indx), w, quote, Rprt_adj_left); break; case CPLXSXP: formatComplex(&COMPLEX(x)[indx], 1, &w, &d, &e, &wi, &di, &ei, 0); res = EncodeComplex(COMPLEX(x)[indx], w, d, e, wi, di, ei, dec); break; case RAWSXP: res = EncodeRaw(RAW(x)[indx]); break; default: res = NULL; /* -Wall */ UNIMPLEMENTED_TYPE("EncodeElement", x); } return res; }
static void printRawMatrix(SEXP sx, int offset, int r_pr, int r, int c, SEXP rl, SEXP cl, const char *rn, const char *cn) { _PRINT_INIT_rl_rn; Rbyte *x = RAW(sx) + offset; for (j = 0; j < c; j++) { formatRaw(&x[j * r], (R_xlen_t) r, &w[j]); _PRINT_SET_clabw; if (w[j] < clabw) w[j] = clabw; w[j] += R_print.gap; } _PRINT_DEAL_c_eq_0; while (jmin < c) { width = rlabw; do { width += w[jmax]; jmax++; } while (jmax < c && width + w[jmax] < R_print.width); _PRINT_ROW_LAB; for (j = jmin; j < jmax ; j++) MatrixColumnLabel(cl, j, w[j]); for (i = 0; i < r_pr; i++) { MatrixRowLabel(rl, i, rlabw, lbloff); for (j = jmin; j < jmax; j++) Rprintf("%*s%s", w[j]-2, "", EncodeRaw(x[i + j * r], "")); } Rprintf("\n"); jmin = jmax; } }
void printRawVector(Rbyte *x, int n, int indx) { int i, w, labwidth=0, width; DO_first_lab; formatRaw(x, n, &w); w += R_print.gap; for (i = 0; i < n; i++) { if (i > 0 && width + w > R_print.width) { DO_newline; } Rprintf("%*s%s", R_print.gap, "", EncodeRaw(x[i])); width += w; } Rprintf("\n"); }