Hello, 

Somewhat motivated from Doug's recent question: 
http://permalink.gmane.org/gmane.comp.lang.r.rcpp/412

I added some experimental code in Rcpp to allow this: 

code <- '
        NumericVector xx(x) ;
        NumericVector ll(lowerBd) ;
        
        return any( xx < ll ) ;
        
'
chkfun4 <- cxxfunction( signature( x = "numeric", lowerBd = "numeric" ), 
        code, plugin = "Rcpp" )

chkfun4(1, 0)
chkfun4(c(1, 0, 1), c(0, -Inf, 0))


This uses lazy evaluation so that   "xx < ll " is not evaluated at this point, 
but each xx[i] < ll[i] is evaluated later (if and when they are needed). So for 
example : 

xx <- c( 1, rep( 0, 100000 ) )
yy <- c( 2, rep( 0, 100000 ) )
chkfun4( xx, yy )

only has to compare 1 and 2. This should be as fast as Dirk's version,  but it 
takes care of missing values. so 

> chkfun4( NA, 1 )
[1] NA


Obviously, this will need some more abstraction so that we can have more 
operators (>, >=, <=, ==) and more functions (all, etc ...), but you get the 
idea.

Romain


_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to