Thanks. Will put together a small working example and file it. I might even attempt a fix in my copious free time ;-).
Cheers, Will > On Nov 8, 2018, at 1:29 AM, Kevin Ushey <kevinus...@gmail.com> wrote: > > I agree we should be using R_xlen_t here. As always, PRs are welcome. > > You might want to file this at https://github.com/RcppCore/Rcpp/issues > just so it doesn't get lost. > > Thanks, > Kevin > >> On Tue, Nov 6, 2018 at 11:23 PM Qiang Kou <q...@qkou.info> wrote: >> >> Hi, William, >> >> Can you give us a small piece of code to reproduce the error? That will ease >> our discussion. >> >> Best, >> >> KK >> >>> On Tue, Nov 6, 2018 at 10:46 PM William Nolan <w...@landale.net> wrote: >>> >>> Hi all, >>> >>> Longtime user and lurker here. >>> >>> I got "index error" thrown by Rcpp when trying to subset a matrix with >>> width * height == 644764 * 3776 greater than MAXINT: >>> >>> Allocating 647764 x 3776 matrix... >>> Catchpoint 1 (exception thrown), 0x00007ffff4baa920 in __cxa_throw () from >>> /usr/lib64/libstdc++.so.6 >>> #1 0x0000000000473a05 in Rcpp::stop<>(char const*) (fmt=0x7fffe7bc3545 >>> "index error") >>> at >>> /home/nolanw/R/x86_64-redhat-linux-gnu-library/3.5/Rcpp/include/Rcpp/exceptions/cpp11/exceptions.h:52 >>> 52 throw Rcpp::exception( tfm::format(fmt, >>> std::forward<Args>(args)... ).c_str() ); >>> (gdb) down >>> #0 0x00007ffff4baa920 in __cxa_throw () from /usr/lib64/libstdc++.so.6 >>> (gdb) up >>> #1 0x0000000000473a05 in Rcpp::stop<>(char const*) (fmt=0x7fffe7bc3545 >>> "index error") >>> at >>> /home/nolanw/R/x86_64-redhat-linux-gnu-library/3.5/Rcpp/include/Rcpp/exceptions/cpp11/exceptions.h:52 >>> 52 throw Rcpp::exception( tfm::format(fmt, >>> std::forward<Args>(args)... ).c_str() ); >>> (gdb) up >>> #2 0x00007fffe7bb75a6 in Rcpp::SubsetProxy<14, Rcpp::PreserveStorage, 13, >>> true, Rcpp::Vector<13, Rcpp::PreserveStorage> >::check_indices >>> (this=0x7fffffffc450, x=0x13f9920, >>> n=3751, size=-1849010432) at >>> /home/nolanw/R/x86_64-redhat-linux-gnu-library/3.5/Rcpp/include/Rcpp/vector/:138 >>> 138 stop("index error"); >>> (gdb) up >>> #3 0x00007fffe7bb6a3c in Rcpp::SubsetProxy<14, Rcpp::PreserveStorage, 13, >>> true, Rcpp::Vector<13, Rcpp::PreserveStorage> >::get_indices >>> (this=0x7fffffffc450, t=...) >>> at >>> /home/nolanw/R/x86_64-redhat-linux-gnu-library/3.5/Rcpp/include/Rcpp/vector/Subsetter.h:149 >>> 149 check_indices(ptr, rhs_n, lhs_n); >>> (gdb) l >>> 144 #endif >>> 145 >>> 146 void get_indices( traits::identity< traits::int2type<INTSXP> > >>> t ) { >>> 147 indices.reserve(rhs_n); >>> 148 int* ptr = INTEGER(rhs); >>> 149 check_indices(ptr, rhs_n, lhs_n); >>> 150 for (int i=0; i < rhs_n; ++i) { >>> 151 indices.push_back( rhs[i] ); >>> 152 } >>> 153 indices_n = rhs_n; >>> >>> As we can see from the stack trace and below, lhs.size() is negative when >>> cast to int: >>> >>> (gdb) p (int)(lhs.size()) >>> $12 = -1849010432 >>> >>> This is all coming from the assignment (via operator []) of the subsetting >>> of one matrix to another matrix's subset: >>> >>> (static_cast<NumericVector&>(mat))[lhsI] = >>> (static_cast<NumericVector&>(signals))[rhsI]; >>> >>> (lhsI and rhsI are IntegerVector's) >>> >>> Now, setting aside whether I *should* be doing that -- what I *do* see in >>> Subsetter.h (including what I understand to be the most recent version, >>> 1.0.0 from github) is the use of int for indices all over the place in this >>> file, including in the member variable: >>> >>> std::vector<int> indices; >>> >>> Is there any reason why the indices that Subsetter uses internally >>> shouldn't be size_t or an equivalently capable type like R_xlen_t? >>> For example, Subsetter's check_indices function takes int's as arguments, >>> while Vector's size method returns R_xlen_t. >>> >>> I'll change my code to manually copy elements via operator() using the >>> row/column arguments for now. Seems like Subsetter is maybe not quite >>> ready for prime time. >>> >>> >>> _______________________________________________ >>> 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 >> >> _______________________________________________ >> 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 _______________________________________________ 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