@@ -86,17 +86,18 @@ sourceCpp(code='
86
86
// [[Rcpp::export]]
87
87
Rcpp::List fun(Rcpp::NumericVector Yr, Rcpp::NumericMatrix Xr){
88
88
89
- int i,j, n = Xr.nrow(), k = Xr.ncol();
89
+ int i, j, n = Xr.nrow(), k = Xr.ncol();
90
90
double chisq;
91
91
92
- gsl_matrix *X = gsl_matrix_alloc (n, k);
93
- gsl_vector *y = gsl_vector_alloc (n);
94
- gsl_vector *c = gsl_vector_alloc (k);
95
- gsl_matrix *cov = gsl_matrix_alloc (k, k);
92
+ RcppGSL::Matrix X(n, k); // allocate a gsl_matrix<double> of dim n, k
93
+ RcppGSL::Vector y(n); // allocate a gsl_vector<double> of length n
94
+ RcppGSL::Vector c(k); // allocate a gsl_vector<double> of length k
95
+ RcppGSL::Matrix cov(k, k); // allocate a gsl_matrix<double> of dim k, k
96
+
96
97
for (i = 0; i < n; i++) {
97
98
for (j = 0; j < k; j++)
98
- gsl_matrix_set (X, i, j, Xr(i,j) );
99
- gsl_vector_set (y, i, Yr(i));
99
+ X( i, j) = Xr(i, j );
100
+ y[i] = Yr(i); // Note vector requires [] not ()
100
101
}
101
102
102
103
gsl_multifit_linear_workspace *work = gsl_multifit_linear_alloc (n, k);
@@ -105,17 +106,13 @@ Rcpp::List fun(Rcpp::NumericVector Yr, Rcpp::NumericMatrix Xr){
105
106
106
107
Rcpp::NumericVector coefr(k), stderrestr(k);
107
108
for (i = 0; i < k; i++) {
108
- coefr(i) = gsl_vector_get(c,i) ;
109
- stderrestr(i) = sqrt(gsl_matrix_get( cov, i,i));
109
+ coefr(i) = c[i] ;
110
+ stderrestr(i) = sqrt(cov( i,i));
110
111
}
111
- gsl_matrix_free (X);
112
- gsl_vector_free (y);
113
- gsl_vector_free (c);
114
- gsl_matrix_free (cov);
115
112
116
113
117
- return Rcpp::List::create( Rcpp::Named( "coef", coefr) ,
118
- Rcpp::Named( "stderr", stderrestr) );
114
+ return Rcpp::List::create( Rcpp::Named("coef") = coefr,
115
+ Rcpp::Named("stderr") = stderrestr);
119
116
}' )
120
117
fun
121
118
}
0 commit comments