SEXP attribute_hidden do_islistfactor(SEXP call, SEXP op, SEXP args, SEXP rho) { SEXP X; Rboolean lans = TRUE, recursive; int i, n; checkArity(op, args); X = CAR(args); recursive = CXXRCONSTRUCT(Rboolean, asLogical(CADR(args))); n = length(X); if(n == 0 || !isVectorList(X)) { lans = FALSE; goto do_ans; } if(!recursive) { for(i = 0; i < LENGTH(X); i++) if(!isFactor(VECTOR_ELT(X, i))) { lans = FALSE; break; } } else { switch(TYPEOF(X)) { case VECSXP: for(i = 0; i < LENGTH(X); i++) if(!islistfactor(VECTOR_ELT(X, i))) { lans = FALSE; break; } break; case EXPRSXP: for(i = 0; i < LENGTH(X); i++) if(!islistfactor(XVECTOR_ELT(X, i))) { lans = FALSE; break; } break; default: break; } } do_ans: return ScalarLogical(lans); }
static Rboolean islistfactor(SEXP X) { int i, n = length(X); if(n == 0) return FALSE; switch(TYPEOF(X)) { case VECSXP: for(i = 0; i < LENGTH(X); i++) if(!islistfactor(VECTOR_ELT(X, i))) return FALSE; return TRUE; break; case EXPRSXP: for(i = 0; i < LENGTH(X); i++) if(!islistfactor(XVECTOR_ELT(X, i))) return FALSE; return TRUE; break; default: // -Wswitch break; } return isFactor(X); }
static Rboolean islistfactor(SEXP X) { int i, n = length(X); switch(TYPEOF(X)) { case VECSXP: case EXPRSXP: if(n == 0) return NA_LOGICAL; for(i = 0; i < LENGTH(X); i++) if(!islistfactor(VECTOR_ELT(X, i))) return FALSE; return TRUE; break; } return isFactor(X); }