[Rd] eval a SYMSXP from C
Whit Armstrong
armstrong.whit at gmail.com
Mon Apr 16 23:53:02 CEST 2012
Can someone offer some advice on how to properly evaluate a SYMSXP
from a .Call ?
I have the following in R:
variable xn, with an attribute "mu" which references the variable mu
in the global environment.
I know "references" is a loose term; mu was defined in this fashion as
a way to implement deferred binding:
foo <- function(x,mu) {
attr(x,"mu") <- substitute(mu)
x
}
mu <- 2.0
xn <- foo(rnorm(100),mu)
> typeof(attr(xn,"mu"))
[1] "symbol"
> eval(attr(xn,"mu"))
[1] 2
>
In a .Call, I am attempting to eval the SYMSXP as follows:
SEXP mu_ = Rf_getAttrib(x_,Rf_install("mu"));
if(TYPEOF(mu_)==SYMSXP) {
mu_ = Rf_eval(Rf_lang1(mu_),R_GlobalEnv);
}
However, when running this code, I get the following error:
Error in logp(xn) : could not find function "mu"
Do I need to create an expression of c("get", "mu") to force the name
lookup to evaluate the SYMSXP?
Thanks,
Whit
More information about the R-devel
mailing list