[Rcpp-devel] A tough RcppArmadillo Error; address(nil) cause 'unknown' in R
井澤 毅
a-izawa at mail.ecc.u-tokyo.ac.jp
Sat Jul 1 20:06:15 CEST 2017
Dear rcpp-devel at lists.r-forge.r-project.org,
Sorry for bothering you much, but do me a favor please. Please help me
some.
I am just a molecular biologist working on plants. Thus, I am still a
newcomer in this field.
Recently, I have been working with a script using RcppArmadillo, This
has helped me a lot. However, after updating the system in our
institute, the script gives me an error repeatedly. My former Postdoc
wrote this script. Thus, I did not know this inside much.
I have tried to fix it for more than a month, but now I have no idea how
to fix it. I would appreciate it very much if you could help and give me
your advice.
Please see an attached cpp file, termed ge-r.cpp. With this cpp file and
other ones, I have succeeded to install a skeleton R package into R
using your function Rcpp.package.skeleton.
In this ge-r.cpp, there is one R function called simulate_R() written.
In this R fucntion, there are two C++ functions, load() and simulate(),
both are described in other cpp files, called from C++ into R. With cout
function described in simulate_R(), I confirmed these two function work
in R thanks to RcppArmadillo, however, it suddenly stops with an error,
address(nil) cause 'unknown' in R. It has seemed to stop when it return
(out) at the last in ge-r.cpp. I do not know why it happens. Note that
the C++ script works normally after the update of the system. Only this
RcppArmadillo conversion from C++ function into a R function is deformed.
Please give me an advice, please. Of course, I can give you more
information on the C++ script in details if you need.
Best regards,
Takeshi
ge-r.cpp
#ifndef __R__
#define __R__
#endif
#ifndef USE_OMP
#define USE_OMP
#endif
#include <RcppArmadillo.h>
#include "ge-model.h"
using namespace arma;
// input:
// parameter matrix: row for particle, col for parameter
// filename of observation
// output:
// simulation for regular time points: row for particle, col for time, slice for term
// existing observation to corresponding regular time points
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
Rcpp::List simulate_R(const arma::mat& param_r, const char* fobs, const int interval) {
try {
geModel Model;
Model.n_thread=omp_get_num_procs();
Model._param=param_r;
cout << "params set.\n";
cout << "filename of obs: "<< fobs << ".\n";
Model._obs.load(fobs);
cout << "obs loaded.\n";
Model.n_acc=Model._param.n_rows;
cout << "n_acc set to be " << Model.n_acc << ".\n";
Model._obs._out_interval = interval;
Model._obs._n_out_date = (Model._obs._n_date / Model._obs._out_interval) + 1;
Model.out_y=cube(Model.n_acc, Model._obs._n_group, Model._obs._n_out_date);
Model.out_res_1=cube(Model.n_acc,Model._obs._n_group, Model._obs._n_out_date);
Model.out_res_2=cube(Model.n_acc,Model._obs._n_group, Model._obs._n_out_date);
Model.out_res_clock=cube(Model.n_acc,Model._obs._n_group, Model._obs._n_out_date);
Model.out_res_dev=cube(Model.n_acc,Model._obs._n_group, Model._obs._n_out_date);
cout << "output matrix initialized.\n";
//necessary for simulate_obs
Model._distance=vec(Model.n_acc);
Model.simulate(0,Model.n_acc-1,true);
cout << "simulation complete.\n";
fflush(stdout);
cout << size(Model.out_y)<<".\n"<< Model.out_y[0]<<".\n"<<Model.out_y[1]<<".\n"<<Model.out_y[2]<<".\n";
Rcpp::List out = Rcpp::List::create(
Rcpp::Named("out_y")=Model.out_y,
Rcpp::Named("out_res_1")=Model.out_res_1,
Rcpp::Named("out_res_2")=Model.out_res_2,
Rcpp::Named("out_res_clock")=Model.out_res_clock,
Rcpp::Named("out_res_dev")=Model.out_res_dev
);
cout << "List constructed.\n";
fflush(stdout);
return (out);
}
catch(char* e) {
cout << e << "\n";
exit(EXIT_FAILURE);
}
catch(...) {
cout << "Error\n";
exit(EXIT_FAILURE);
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20170702/971033fe/attachment.html>
More information about the Rcpp-devel
mailing list