r - Warning when downcasting in Rcpp? -


i have rcpp function should take integervector input (as toint). want use on vector of integers, on vector of doubles integers (e.g. 1:4 of type integer 1:4 + 1 of type double).

yet, when used on real floating point numbers (e.g. 1.5), return warning or error instead of silently rounding values (to make them integers).

#include <rcpp.h> using namespace rcpp;  // [[rcpp::export]] integervector toint(robject x) {   return as<integervector>(x); }   > toint(c(1.5, 2.4))  # warning [1] 1 2  > toint(1:2 + 1)      # no need of warning [1] 2 3 

rcpp sugar has need. here 1 possible implementation:

#include <rcpp.h> using namespace rcpp;  // [[rcpp::export]] integervector fprive(const robject & x) {     numericvector nv(x);     integervector iv(x);     if (is_true(any(nv != numericvector(iv)))) warning("uh-oh");     return(iv); }  /*** r fprive(c(1.5, 2)) fprive(c(1l, 2l)) */ 

its output follows:

r> rcpp::sourcecpp('/tmp/fprive.cpp')  r> fprive(c(1.5, 2)) [1] 1 2  r> fprive(c(1l, 2l)) [1] 1 2 warning message: in fprive(c(1.5, 2)) : uh-oh r>  

because warning object, can control via options("warn") whether want abort, print immediately, print @ end, ignore, ...


Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -