Ken,
On 19 February 2013 at 23:24, Ken Williams wrote:
| > From: Dirk Eddelbuettel [mailto:[email protected]]
| > Eeeek. I prefer the more C++-y way of writing df(j,i).
|
| Attempting to do so, I get a compile-time error:
|
| window.cpp:68:34: error: ambiguous overload for 'operator-' in
'Rcpp::Vector<RTYPE>::operator()(const size_t&, const size_t&) [with int RTYPE
= 19, Rcpp::Vector<RTYPE>::Proxy = Rcpp::internal::generic_proxy<19>, size_t =
long long unsigned int]((* &((size_t)j)), (* &((size_t)i))) -
Rcpp::Vector<RTYPE>::operator()(const size_t&, const size_t&) [with int RTYPE =
19, Rcpp::Vector<RTYPE>::Proxy = Rcpp::internal::generic_proxy<19>, size_t =
long long unsigned int]((* &((size_t)j)), (* &((size_t)last_i)))'
| window.cpp:68:34: note: candidates are:
| window.cpp:68:34: note: operator-(SEXP, SEXP) <built-in>
| window.cpp:68:34: note: operator-(SEXP, long long int) <built-in>
| window.cpp:68:34: note: operator-(int, int) <built-in>
|
| For context, the line that's failing is:
|
| if(fabs(df(j,i)-df(j,last_i))>thresh) {
You are relying on an implicit conversion here to make df(.,.) a double. The
compiler tells you that it is trying sugar operators. Sugar is good to have
in Rcpp, but occassionally there is a cost. This may be one of those times.
Try
double a = df(j,i);
double b = df(j,last_i);
if (fabs(a - b) > thresh) {
and see if that works.
You may want to look into using Armadillo vectors and matrices (or Eigen's,
we are equal opportunity here). I had good luck with Armadilllo.
| I was operating under the premise that there "must be" a constant-time
accessor for a List element (DataFrame column), and once I have that, a
constant-time accessor for an element of that vector. I know the latter is
true, but is the former not true? I assumed it was but that I just couldn't
find it.
Sadly, "must be" is a little too optimistic.
Not every conceivable operation is implemented in Rcpp, but we are always
open to patches to make it more complete.
Hope this helps, Dirk
--
Dirk Eddelbuettel | [email protected] | http://dirk.eddelbuettel.com
_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel