Beispiel #1
0
SEXP assert_correct_filter_subcall(SEXP x, const SymbolSet& set, const Environment& env){
    switch(TYPEOF(x)){
    case LGLSXP: return x;
    case LANGSXP: return x ;
    case SYMSXP:
        {
            if( set.count(x) ) return x ;

            // look in the environment
            SEXP var = PROTECT( Rf_findVar( x, env ) ) ;
            SEXP res = Rf_duplicate(var) ;
            UNPROTECT(1) ;
            if( res == R_UnboundValue ){
                if( x == Rf_install("T") ){
                    return Rf_ScalarLogical(TRUE) ;
                } else if( x == Rf_install("F") ){
                    return Rf_ScalarLogical(FALSE) ;
                }
                stop( "unknown column : %s", CHAR(PRINTNAME(x)) );
            }
            return res ;
        }
    default:
        break ;
    }
    stop("incompatible expression in filter") ;
    return x ; // never happens
}
Beispiel #2
0
SEXP assert_correct_filter_subcall(SEXP x, const SymbolSet& set, const Environment& env){
    switch(TYPEOF(x)){
    case LANGSXP: return x ;
    case SYMSXP:
        {
            if( set.count(x) ) return x ;
            
            // look in the environment
            SEXP res = Rf_findVar( x, env ) ;
            if( res == R_UnboundValue ){
                if( x == Rf_install("T") ){
                    return Rf_ScalarLogical(TRUE) ;
                } else if( x == Rf_install("F") ){
                    return Rf_ScalarLogical(FALSE) ;    
                }
                
                std::stringstream s ;
                s << "unknown column : " << CHAR(PRINTNAME(x)) ;
                stop(s.str());
            }
            return res ;
        }
    default:
        break ;
    }
    stop("incompatible expression in filter") ;
    return x ; // never happens
}
Beispiel #3
0
SEXP assert_correct_filter_subcall(SEXP x, const SymbolSet& set){
    switch(TYPEOF(x)){
    case LANGSXP: return x ;
    case SYMSXP:
        {
            if( set.count(x) ) return x ;
            std::stringstream s ;
            s << "unknown column : " << CHAR(PRINTNAME(x)) ;
            stop(s.str());
        }
    default:
        break ;
    }
    stop("incompatible expression in filter") ;
    return x ; // never happens
}