A second example of using Boost
[This article was first published on Rcpp Gallery, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
We introduced Boost in a first post doing some integer math. In this post we want to look at the very versatile Boost.Lexical_Cast library to convert text to numbers – see the Motivation for more.
As before, I should note that I write this post on a machine with Boost headers in a standard system location. So stuff just works. If you have to install Boost from source, and into a non-standard location, you may need to add a -I
flag, not unlike how added the C++11 flag in this post .
#include <Rcpp.h> #include <boost/lexical_cast.hpp> // one file, automatically found for me using namespace Rcpp; using boost::lexical_cast; using boost::bad_lexical_cast; // [[Rcpp::export]] std::vector<double> lexicalCast(std::vector<std::string> v) { std::vector<double> res(v.size()); for (int i=0; i<v.size(); i++) { try { res[i] = lexical_cast<double>(v[i]); } catch(bad_lexical_cast &) { res[i] = NA_REAL; } } return res; }
This simple program uses the exceptions idiom we discussed to branch: when a value cannot be converted, a NA
value is inserted.
We can test the example:
v <- c("1.23", ".4", "1000", "foo", "42", "pi/4") lexicalCast(v) [1] 1.23 0.40 1000.00 NA 42.00 NA
To leave a comment for the author, please follow the link and comment on their blog: Rcpp Gallery.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.