[Rcpp-devel] A tough RcppArmadillo Error; address(nil) cause 'unknown' in R

井澤 毅 a-izawa at mail.ecc.u-tokyo.ac.jp
Mon Jul 10 06:55:31 CEST 2017


Dear KK,

Sorry for bothering you again, I still have some problems.

According to your advice, in order to initialize the array in ge-r.cpp,

I put


                 Model.out_y=cube(Model.n_acc, Model._obs._n_group, 
Model._obs._n_out_date,fill::zeros);
Model.out_res_1=cube(Model.n_acc,Model._obs._n_group, 
Model._obs._n_out_date,fill::zeros);
Model.out_res_2=cube(Model.n_acc,Model._obs._n_group, 
Model._obs._n_out_date,fill::zeros);
Model.out_res_clock=cube(Model.n_acc,Model._obs._n_group, 
Model._obs._n_out_date,fill::zeros);
Model.out_res_dev=cube(Model.n_acc,Model._obs._n_group, 
Model._obs._n_out_date,fill::zeros);

instead of the old ones,

                 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);

However, I got the same error in R.

What should I do next ?

I am afraid that I do not know how rand generated in ge-model.cpp (line 
37) is linked to the array in ge-r.cpp (line 49) yet. Should I use 
fill:: randu instead of fill:: zeros?

Best,

Takeshi



On 2017/07/10 13:03, 井澤 毅 wrote:
>
> Dear KK,
>
> Thanks for this explanation. Now I got it.
>
> I did not think that ge-model.cpp is involved in this problem since it 
> works well as a C++ script even in our current system.
>
> I still wonder why this ge-r.cpp works in the old system, but I will 
> ask this to the maintainer of our system.
>
> I have learned a lot from your suggestion.
>
> Thanks again!
>
> Best,
>
> Takeshi
>
>
> On 2017/07/10 10:34, Qiang Kou wrote:
>> In line 37 of ge-model.cpp, you try to free _rand. However, if you 
>> don't call initialize in line 49 first, the array won't be initialized.
>>
>> Best,
>>
>> KK
>>
>> On Sun, Jul 9, 2017 at 4:45 PM, 井澤 毅 <a-izawa at mail.ecc.u-tokyo.ac.jp 
>> <mailto:a-izawa at mail.ecc.u-tokyo.ac.jp>> wrote:
>>
>>     Dear KK,
>>
>>     I owe you a lot! I will check it as soon as possible.
>>
>>     Since I am not familiar with this much, I would be very happy to
>>     tell me some urls describing "initialize".
>>
>>     Best,
>>
>>     Takeshi
>>
>>
>>     On 2017/07/10 7:38, Qiang Kou wrote:
>>>     Hi, professor,
>>>
>>>     I think the problem is in ge-r. cpp, you forgot to call
>>>     *initialize*.
>>>
>>>     The error has nothing to do with Rcpp.
>>>
>>>     Best,
>>>
>>>     KK
>>>
>>>     On Tue, Jul 4, 2017 at 2:45 AM, 井澤 毅
>>>     <a-izawa at mail.ecc.u-tokyo.ac.jp
>>>     <mailto:a-izawa at mail.ecc.u-tokyo.ac.jp>> wrote:
>>>
>>>         Sorry, I forgot the attached file.
>>>
>>>         On 2017/07/04 18:43, 井澤 毅 wrote:
>>>>
>>>>         Dear KK,
>>>>
>>>>         Thanks for your kind reply.
>>>>
>>>>         I am afraid that one of the input file is very heavy, this
>>>>         time but I am sending a ZIP file including all.
>>>>
>>>>         Please make v30 package using install.simulate_R_1.r and
>>>>         then install.simulate_R_2.r. Then, try ge-r_test.r, please.
>>>>
>>>>         To make the v30 package, we need ge-r.cpp, ge-model.cpp,
>>>>         ge-model.h, ge-obs.cpp, ge-obs.h, ge-range.h.
>>>>
>>>>         As the input file, we need var.mat.all matrix data in R and
>>>>         obs.Os01g0182600_g1.nc <http://obs.Os01g0182600_g1.nc> file
>>>>         in the directry.
>>>>
>>>>         Then, you will see the error I have been suffering from for
>>>>         a month.
>>>>
>>>>         The obs.Os01g0182600_g1.nc
>>>>         <http://obs.Os01g0182600_g1.nc> file is a file containing
>>>>         environmental fluctuation data.
>>>>
>>>>         Best,
>>>>
>>>>         Takeshi
>>>>
>>>>
>>>>         On 2017/07/04 5:40, Qiang Kou wrote:
>>>>>         Hi, I am afraid the example you provided is not a
>>>>>         reproducible example.
>>>>>
>>>>>         First, we don't know the content of ge-model.h. Second, we
>>>>>         don't know which input will trigger the fault.
>>>>>
>>>>>         Please provide a reproducible example if you really want
>>>>>         to get help.
>>>>>
>>>>>         Best,
>>>>>
>>>>>         KK
>>>>>
>>>>>         On Sat, Jul 1, 2017 at 11:06 AM, 井澤 毅
>>>>>         <a-izawa at mail.ecc.u-tokyo.ac.jp
>>>>>         <mailto:a-izawa at mail.ecc.u-tokyo.ac.jp>> wrote:
>>>>>
>>>>>             Dear rcpp-devel at lists.r-forge.r-project.org
>>>>>             <mailto: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);
>>>>>             	}
>>>>>             }
>>>>>
>>>>>             _______________________________________________
>>>>>             Rcpp-devel mailing list
>>>>>             Rcpp-devel at lists.r-forge.r-project.org
>>>>>             <mailto:Rcpp-devel at lists.r-forge.r-project.org>
>>>>>             https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>>>>>             <https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel>
>>>>>
>>>>>
>>>>>         -- 
>>>>>         Qiang Kou
>>>>>         qkou at umail.iu.edu <mailto:qkou at umail.iu.edu>
>>>>>         School of Informatics and Computing, Indiana University
>>>
>>>     -- 
>>>     Qiang Kou
>>>     qkou at umail.iu.edu <mailto:qkou at umail.iu.edu>
>>>     School of Informatics and Computing, Indiana University
>>
>> -- 
>> Qiang Kou
>> qkou at umail.iu.edu <mailto:qkou at umail.iu.edu>
>> School of Informatics and Computing, Indiana University
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20170710/d15f76c8/attachment-0001.html>


More information about the Rcpp-devel mailing list