[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