[Rcpp-devel] Using formula
Denis Haine
cheval at zaclys.net
Wed Sep 4 21:37:24 CEST 2024
Hi,
Sorry for a beginner's question. I'm trying to call an R function
(glm()) inside my cpp code. The code compiles with no problem, but when
I'm running it, it cannot find the second element of the formula, i.e.
the x in y~x. The error message is: Error in eval (predvars; data, env)
: object 'e' not found.
However, if I return 'e', it is correctly calculated. I guess the
formula is not correctly evaluated, but I haven't found any examples
that could point me in one direction or another.
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector misclass(NumericMatrix obs_mat) {
// Obtain environment containing function
Rcpp::Environment base("package:stats");
// Picking up glm() and summary() function from base stats
Rcpp::Function glm_r = base["glm"];
Rcpp::Function sum_r = base["summary.glm"];
Rcpp::NumericVector d = obs_mat(_, 1);
Rcpp::NumericVector e = no_init(n);
Rcpp::NumericVector mod_coef = no_init(n);
// e is calculated in other section of the code
e = as<IntegerVector>(e);
Rcpp::List mod_pois = glm_r(_["formula"] = "d ~ e",
_["family"] = "poisson");
Rcpp::List mod_sum = sum_r(mod_pois);
Rcpp::NumericMatrix M_coef = mod_sum[12];
mod_coef = M_coef(2, 1);
return mod_coef;
}
I also tried providing the formula in the call, i.e. NumericVector
misclass(NumericMatrix obs_mat, Formula f) and using it in glm_r, i.e.
glm_r(_["formula"] = f, etc. but with the same outcome.
Thanks,
Denis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20240904/c070c94f/attachment.htm>
More information about the Rcpp-devel
mailing list