I've attached a somewhat tweaked example which I think might indicate
that modules don't know about const NumericVector&?
> GroupFixed <- m$GroupFixed
> g <- GroupFixed$new(x, 0.1, 0)
> g$size()
[1] 1
> g$bin(1L)
[1] 0
> g$get(1L)
[1] 6.953223e-310
The answers should be 8, 100 and 0.08075014 respectively.
Hadley
On Wed, Feb 20, 2013 at 11:39 AM, Hadley Wickham <[email protected]> wrote:
> Hi all,
>
> I'm having a simple problem with modules - when I instantiating the
> object and call the methods in C++, I get a different answer from
> instantiating and calling the methods in R via a module. I've
> attached a simple test case that you can run with sourceCpp() - when I
> run it (using svn rev 4264 or CRAN version) I get 0 instead of 8. What
> am I doing wrong?
>
> Thanks!
>
> Hadley
>
> --
> Chief Scientist, RStudio
> http://had.co.nz/
--
Chief Scientist, RStudio
http://had.co.nz/
// Sys.setenv("CXXFLAGS" = "-g -O0")
#include <Rcpp.h>
using namespace Rcpp;
class GroupFixed {
const NumericVector& x_;
double width_;
double origin_;
public:
GroupFixed (const NumericVector& x, double width, double origin = 0)
: x_(x), width_(width), origin_(origin) {
}
int bin(int i) const {
if (x_[i] < origin_) return 0;
return (x_[i] - origin_) / width_;
}
int size() const {
return x_.size();
}
double get(int i) const {
return x_[i - 1];
}
};
RCPP_MODULE(Group) {
class_<GroupFixed>("GroupFixed")
.constructor<const NumericVector&, double, double>()
.const_method("bin", &GroupFixed::bin)
.const_method("size", &GroupFixed::size)
.const_method("get", &GroupFixed::get)
;
}
// [[Rcpp::export]]
int test(const NumericVector& x) {
GroupFixed g(x, 0.1, 0);
return g.bin(1);
}
/*** R
# With C++
set.seed(1014)
x <- runif(100)
test(x)
# With R, using module
last <- function(x) x[[length(x)]]
m <- Module("Group", last(getLoadedDLLs()))
GroupFixed <- m$GroupFixed
g <- GroupFixed$new(x, 0.1, 0)
g$size()
g$bin(1L)
g$get(1L)
**/_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel