我必须编写一个线性回归程序并使用R调用它。 这是我的代码。它无法将theta作为SEXP返回。
SEXP reg(Rcpp::NumericVector x,Rcpp::NumericVector y){
int i,n1,n2;
n1=x.size();
n2=y.size();
if(n1!=n2)
cout<<"Error";
else{
double wx[n1], wy[n1];
for(i=0;i<n1;i++){
wx[i]=x[i];
wy[i]=y[i];
}
int iterations=1500;
//default learning rate;
double alpha=0.01;
double *theta = new double[2];
double *J = new double[iterations];
theta = gradient_descent(wx,wy, alpha, iterations, J, n1,theta);
return(theta);
}
}
它出错:无法转换&#39; double *&#39;到了SEXP&#39;作为回报。 我想要一些解决方案。
答案 0 :(得分:0)
你的功能不合适。尝试下风(未经测试):
SEXP reg(Rcpp::NumericVector x,Rcpp::NumericVector y){
int i,n1,n2;
SEXP out = PROTECT(allocVector(REALSXP, 2));
n1=x.size();
n2=y.size();
if(n1!=n2)
cout<<"Error";
else{
double wx[n1], wy[n1];
for(i=0;i<n1;i++){
wx[i]=x[i];
wy[i]=y[i];
}
int iterations=1500;
//default learning rate;
double alpha=0.01;
double *theta = REAL(out);
double *J = new double[iterations];
theta = gradient_descent(wx,wy, alpha, iterations, J, n1,theta);
}
UNPROTECT(1);
return(out);
}
我不知道您的函数gradient_descent
以及谁应该关心释放J
指向的资源。别忘了释放它。
非常好的有用手册在这里http://adv-r.had.co.nz/C-interface.html