[R] Creating an environment for a function.
Prof Brian Ripley
ripley at stats.ox.ac.uk
Thu Apr 13 20:54:11 CEST 2006
On Thu, 13 Apr 2006, Duncan Murdoch wrote:
> On 4/13/2006 11:38 AM, Rolf Turner wrote:
>> I am trying to build a function in a context where the environment
>> concept would appear to be useful. But I'm a bit foggy about this
>> concept and would appreciate some pointers and advice.
>>
>> Basically the function I'm building, say foo(x,t), is a function of
>> two variables). Depending on the value of t, foo will return one of
>> the values f1(x), f2(x), ..., fk(x), where each of f1, ..., fk is a
>> piecewise linear function (built using approxfun()).
>>
>> Now I want other functions to be able to get at these pwl functions,
>> making use of a syntax of the form
>>
>> bar(y,foo)
>>
>> so that in the code of bar() I could have assignments like
>>
>> clyde <- get("f1",envir=environment(foo))
>>
>> So rather than assigning f1, ..., fk in the body of foo, I would like
>> to assign them in the environment of foo.
>>
>> I want to do something like
>>
>> environment(foo) <- melvin
>>
>> where melvin contains f1, ..., fk. But how do I create ``melvin''
>> so that it is acceptable to the foregoing assignment?
>
> Generally it's not necessary to explicitly set the environment. Here
> the way to get what you want is to define f1 and foo in the same
> environment; then environment(foo) (which defaults to the environment
> where it was created) will contain f1.
>
> So you can have a function like this:
>
> makefoo <- function() {
> f1 <- ...
> f2 <- ...
> foo <- ...
> return(foo)
> }
>
> and the environment of the call to makefoo() will live as long as foo does.
Can I also suggest local()? This does a similar thing in a perhaps more
natural way.
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list