[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