[Rcpp-devel] compileAttributes() does not export function
Kevin Kunzmann
kevinkunzmann at gmx.net
Sat Sep 27 12:30:52 CEST 2014
Hi,
I am experiencing a problem with the 'export' attribute. The file
'cmest.cpp' is compiled all right, but Rcpp misses the function 'cv'
both in RcppExports.cpp as well as RcppExports.R - the
compileAttributes() function ignores the export statement. Other
functions are exported correctly form the same project / source folder!
Any Idea?
Best,
Kevin
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp:export]]
Rcpp::List cv(arma::mat data, int n)
{
// n must be small enough!
// find stage one indices
arma::Col<int> inds = arma::Col<int>(data.n_rows);
int nStageOne = 0;
for(int i = 0; i < data.n_rows; i++)
{
inds(nStageOne) = i;
nStageOne += 1;
}
inds.set_size(nStageOne);
// randomize indices
inds = arma::shuffle(inds);
// select first n items from each subgroup (marker x treatment)
arma::mat res = arma::zeros<arma::mat>(data.n_rows - 4*n,
data.n_cols);
int nRes = 0;
arma::mat oob = arma::zeros<arma::mat>(n*4, data.n_cols);
arma::Col<int> nCount = arma::zeros<arma::Col<int> >(4);
for(int i = 0; i < nStageOne; i++)
{
if(data(inds(i), 1) == 0 && data(inds(i), 3) == 0 && nCount(0) < n)
{
// 00
for(int j = 0; j < data.n_cols; j++)
{
oob(sum(nCount), j) = data(inds(i), j);
}
nCount(0) += 1;
continue;
}
if(data(inds(i), 1) == 0 && data(inds(i), 3) == 1 && nCount(1) < n)
{
// 01
for(int j = 0; j < data.n_cols; j++)
{
oob(sum(nCount), j) = data(inds(i), j);
}
nCount(1) += 1;
continue;
}
if(data(inds(i), 1) == 1 && data(inds(i), 3) == 0 && nCount(2) < n)
{
// 00
for(int j = 0; j < data.n_cols; j++)
{
oob(sum(nCount), j) = data(inds(i), j);
}
nCount(2) += 1;
continue;
}
if(data(inds(i), 1) == 1 && data(inds(i), 3) == 1 && nCount(3) < n)
{
// 00
for(int j = 0; j < data.n_cols; j++)
{
oob(sum(nCount), j) = data(inds(i), j);
}
nCount(3) += 1;
continue;
}
// else
for(int j = 0; j < data.n_cols; j++)
{
res(nRes, j) = data(inds(i), j);
}
nRes += 1;
}
return Rcpp::List::create(Rcpp::Named("data") = res,
Rcpp::Named("oob") = oob);
}
More information about the Rcpp-devel
mailing list