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
#include   	// one file, automatically found for me

using namespace Rcpp;

using boost::lexical_cast;

// [[Rcpp::export]]
std::vector lexicalCast(std::vector v) {

std::vector res(v.size());

for (int i=0; i(v[i]);
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