[Rcpp-devel] Matrix columns
Nick: I had a similar problem a few weeks ago. The underscore is part of the Rcpp namespace. So I added using namespace Rcpp at the beginning of my function, and then all worked well. I can't tell from the compiler output if that is *exactly* what the problem is, but it's worth taking a look. Michael
On May 14, 2011, at 5:33 PM, <rcpp-devel-request at r-forge.wu-wien.ac.at> <rcpp-devel-request at r-forge.wu-wien.ac.at> wrote:
Message: 5
Date: Sat, 14 May 2011 23:12:08 +0200
From: "Nick Sabbe" <nick.sabbe at ugent.be>
Subject: [Rcpp-devel] Matrix columns
To: <rcpp-devel at lists.r-forge.r-project.org>
Message-ID: <02a301cc127b$95e964c0$c1bc2e40$@sabbe at ugent.be>
Content-Type: text/plain; charset="us-ascii"
Hi all,
I've been trying the following, with the main part ripped from
rcpp-quickref:
SEXP dfr2Mat(SEXP dfr)
{
DataFrame df = dfr;
int* dm = INTEGER( ::Rf_getAttrib( df, R_DimSymbol ) ) ;
int rows = dm[0];
int cols = dm[1];
NumericMatrix retMat (rows, cols);
for(int i = 0; i < cols; i++)
{
NumericVector curcol = df(i);
//NumericMatrix::Column zzcol = xx( _, 1);
NumericMatrix::Column cl = retMat.( _, i);
cl = curcol;
}
return retMat;
}
When compiling this, I get some errors starting from the line after the
comment (i.e. line 64):
main.cpp: In function 'SEXPREC* dfr2Mat(SEXPREC*)':
main.cpp:64: error: invalid conversion from 'SEXPREC*' to 'int'
main.cpp:64: error: initializing argument 1 of 'typename
Rcpp::Vector<RTYPE>::Proxy Rcpp::Matrix<RTYPE>::operator()(int, int) [with
int RTYPE = 14]'
main.cpp:64: error: conversion from 'double' to non-scalar type
'Rcpp::MatrixColumn<14>' requested
main.cpp:65: error: no match for 'operator=' in 'cl = curcol'
C:/Users/nisabbe/Documents/R/win-library/2.11/Rcpp/include/Rcpp/vector/Matri
xColumn.h:40: note: candidates are: Rcpp::MatrixColumn<RTYPE>&
Rcpp::MatrixColumn<RTYPE>::operator=(Rcpp::MatrixColumn<RTYPE>&) [with int
RTYPE = 14]
I suspect it has something to do with this underscore syntax.
I compiled with the following statement:
g++ -I"C:/PROGRA~1/R/R-211~1.1/include"
-I"C:/Users/nisabbe/Documents/R/win-library/2.11/Rcpp/include" -O2 -Wall -c
main.cpp -o main.o
And the version of rcpp I installed is 0.9.4 on the most recent version of
R.
Can anyone show me what is wrong here?
Besides the syntax problems, what I am doing here should work, right?
I know there are non-Rcpp ways to get this done, but this is just something
to get me started.
And as an addendum: where can I find out how (not) to use this underscore?
Nick Sabbe
--
ping: nick.sabbe at ugent.be
link: <http://biomath.ugent.be/> http://biomath.ugent.be
wink: A1.056, Coupure Links 653, 9000 Gent
ring: 09/264.59.36
------------------------------------------- Michael Braun Associate Professor of Management Science (Marketing Group) MIT Sloan School of Management 100 Main St.., E62-535 Cambridge, MA 02139 braunm at mit.edu 617-253-3436