[R] a question about function eval()
Feng Chen
fengchen at hkusua.hku.hk
Thu Feb 24 15:19:44 CET 2005
----- Original Message -----
From: "Feng Chen" <fengchen at hkusua.hku.hk>
To: "Uwe Ligges" <ligges at statistik.uni-dortmund.de>
Sent: Thursday, February 24, 2005 9:52 PM
Subject: Re: [R] a question about function eval()
> Dear Uwe,
>
> Thanks for your advice. As you may have noticed, I am a newbie to R and
> not fully aware of the power of such mechanisms like eval(), call(),
> substitute(), ...
>
> In fact, the likelihood function I want to maximize has a nonparametric
> component. I am trying to approximate it using special functions of known
> form but with a finite number, say n, of unknown parameters. I want the
> number n to be variable, so I use vector formals to pass into the
> (log)likelihood function the parameters of the approximating function. I
> tried to maximize the loglikelihood, but without success. Then I guess the
> function passed into mle() should not have vectors or lists as its
> arguments. Therefore, I try to generate functions with a variable number
> of arguments based on the loglikelihood function and use mle() to the new
> functions. That is why I have got all these troubles. Maybe there are more
> convenient alternatives I simply don't know.
>
> By the way, If I use objects globally visible (such as constants) as the
> default values for coef.sex,...,knot.val.n. Then it does work. But now I
> am just curious whether it is possible to use objects existing in the
> parent function as the default values for the arguments of the child
> function (in this eval() case).
>
> Any advice is appreciated,
> Feng
>
> ----- Original Message -----
> From: "Uwe Ligges" <ligges at statistik.uni-dortmund.de>
> To: "Feng Chen" <fengchen at hkusua.hku.hk>
> Cc: <r-help at stat.math.ethz.ch>
> Sent: Thursday, February 24, 2005 7:59 PM
> Subject: Re: [R] a question about function eval()
>
>
>> Feng Chen wrote:
>>
>>> Hi,
>>>
>>> I have a question about the usage of eval(). Wonder if any experienced
>>> user can help me out of it.
>>>
>>> I use eval() in the following function:
>>> semireg.pwl <-
>>> function(coef.s=rnorm(1),coef.a=rnorm(1),knots.pos=knots.x,knots.ini.val=knots.val){
>>> knotn <- length(knots.pos)
>>> def.par.env <- sys.frame(1)
>>> print(def.par.env)
>>> print(environment(coef.s))
>>> tg <- eval( (parse(text=
>>> paste(
>>> "function(coef.sex=coef.s,coef.age=coef.a,",
>>>
>>> paste("knot.val.",1:knotn,"=knots.ini.val[",1:knotn,"]",sep="",collapse=","),
>>> ")",
>>> "{\n print(sys.frame());print(coef.sex)\n y
>>> <- c(",
>>>
>>> paste("knot.val.",1:knotn,sep="",collapse=","),
>>> ")\n",
>>>
>>>
>>> " -loglikelihood(coef.sex,coef.age,knots.pos,y)\n}",
>>> sep="",collapse=""
>>> )
>>> )
>>> )
>>> ,envir=def.par.env)
>>
>> Why do you want to use eval(parse(.....))? That's not sensible in this
>> case. You can either alculate the stuff doirectly or define a function
>> instead....
>>
>> Uwe Ligges
>>
>>
>>
>>> print(tg())
>>> print(coef.s)
>>> print(sys.frame(1))
>>> mle(tg)
>>> }
>>>
>>> But when I ran semireg.pwl(), I got correct value for tg(), but an
>>> message "Error in eval(expr, envir, enclos) : Object "coef.s" not found"
>>> for mle(tg). I just don't know how to make the environment variable
>>> visible for mle().
>>>
>>> Thanks a lot!
>>>
>>> Feng
>>> [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help at stat.math.ethz.ch mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide!
>>> http://www.R-project.org/posting-guide.html
>
More information about the R-help
mailing list