[Rcpp-devel] Filling a big.matrix in Rcpp

Smith, Dale Dale.Smith at Fiserv.com
Thu Mar 14 18:24:57 CET 2013


Write it up for Rcpp Gallery.

 

Dale Smith, Ph.D.

Senior Financial Quantitative Analyst

Risk & Compliance

Fiserv

Office: 678-375-5315

www.fiserv.com <http://www.fiserv.com/> 

 

From: rcpp-devel-bounces at r-forge.wu-wien.ac.at
[mailto:rcpp-devel-bounces at r-forge.wu-wien.ac.at] On Behalf Of Michael
Kane
Sent: Thursday, March 14, 2013 1:19 PM
To: Dirk Eddelbuettel
Cc: rcpp-devel at lists.r-forge.r-project.org
Subject: Re: [Rcpp-devel] Filling a big.matrix in Rcpp

 

OK, I've got it working.

You need to add the bigmemory inst directory to the PKG_CPPFLAGS,
include MatrixAccessor.hpp, and pass the pointer to the BigMatrix object
to your function. The following code should do the trick but note that
it does not create a new big.matrix object it simply modifies the
big.matrix object that is passed to your function.

require(Rcpp)
require(inline)
require(bigmemory)

Sys.setenv(PKG_CPPFLAGS=paste(
  paste("-I", system.file(package="bigmemory"), "/include/bigmemory",
sep=""),
  Sys.getenv("PKG_CPPFLAGS")))

matFn <- '
Rcpp::XPtr<BigMatrix> bigMat(A);
MatrixAccessor<int> Am(*bigMat);

int nrows = bigMat->nrow();
int ncolumns = bigMat->ncol();
for (int j = 0; j < ncolumns; j++){
        for (int i = 1; i < nrows; i++){
                Am[j][i] = Am[j][i] + Am[j][i-1];
        }
}
';
# same function declaration as in example 2.
funx <- cxxfunction(signature(A="externalptr"), body=matFn,   plugin =
"Rcpp", includes='#include "MatrixAccessor.hpp"')

# set up big.matrix
nrows <- 10000
bkFile <- "bigmat.bk"
descFile <- "bigmatk.desc"
suppressMessages(library(bigmemory))
bigmat <- filebacked.big.matrix(nrow=nrows, ncol=3,type="integer",
init=1,
        backingfile=bkFile, backingpath=".",descriptorfile=descFile,
        dimnames=c(NULL,NULL))
matDesc <- bigmemory::describe(bigmat)

funx(bigmat at address)



On Thu, Mar 14, 2013 at 12:40 PM, Dirk Eddelbuettel <edd at debian.org>
wrote:


I do not think we have support for bigmemory's big.matrix objects. So
you
can't just assum it works.

Contributions welcome.  This is both 'an obvious one' as it would make
sense
at the C++ and R levels, and something that should not be so hard as we
support XPtr.

Dirk

--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com

_______________________________________________
Rcpp-devel mailing list
Rcpp-devel at lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20130314/2ba10cdb/attachment-0001.html>


More information about the Rcpp-devel mailing list