On 28 March 2012 at 13:56, Ulrich Bodenhofer wrote: | My question is the following: is there any way of checking in whether a | component of an Rcpp list (or vector) with a given name exists in this list. If | I simply try accessing a non-existing component, I get an "index out of bounds" | error. Trying to catch a possible exception did not work either. I also browsed | the Rcpp package source code, but unfortunately I got lost. Sorry if this has | been addressed on this list before. At least I googled in many different ways, | but could not find anything. Any ideas? Any help is gratefully appreciated!
Good question, and I have the suspicion that we answered that years ago on the list before. Here is a super-pedestrian version. It takes a list, extracts its names() -- and should probably test whether names is empty ? -- and then compares these against a vector of tokens, returning a bool for each token: R> R> suppressMessages(library(inline)) R> R> f <- cxxfunction(signature(ls="list", ts="character"), plugin="Rcpp", body=' + Rcpp::List lst(ls); + Rcpp::CharacterVector nam = lst.names(); + std::vector<std::string> nm = Rcpp::as< std::vector< std::string > >(nam); + int m = nam.size(); + + Rcpp::CharacterVector tok(ts); + std::vector<std::string> tk = Rcpp::as< std::vector< std::string > >(tok); + int n = tok.size(); + + Rcpp::LogicalVector log(n); + + for (int i=0; i<n; i++) { // look at all tokens + log[i] = false; // assume false, but compare to all names + for (int j=0; j<m; j++) { + log[i] = (tk[i] == nm[j]); // and note equality if we find it + } + } + return log; + ') R> ll <- list(aa=1,b="b") ## list with names 'aa' and 'b' R> f(ll, c("aa", "b", "c")) ## does it contain 'a' or 'b' or 'c' ? [1] FALSE TRUE FALSE R> f(ll, "c") ## works with scalars too [1] FALSE R> I am sure there is a much cleverer solution one could write... Dirk -- R/Finance 2012 Conference on May 11 and 12, 2012 at UIC in Chicago, IL See agenda, registration details and more at http://www.RinFinance.com _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel