[R] provide extra variables to environment in call
Thomas Lumley
tlumley at u.washington.edu
Fri Oct 8 16:54:21 CEST 2004
On Fri, 8 Oct 2004, Khamenia, Valery wrote:
> Hi all,
>
> Situation:
>
> there is a function `f' already defined by someone and
> provided in package. `f' looks like that:
>
> f <- function() {
> x+1
> }
>
> i.e. `f' is not closed i.r.t. term `x'
>
> now I have my own function `g', where I'd like
> to override variable `x' while calling `f':
>
> x <- "dummy gloabal value"
>
> g <- function() {
> x <- 42
> eval(f(), environment()) # how to make loacl `x' visible in `f'?
> }
>
> g() # => Error in x + 1 : non-numeric argument to binary operator
>
> Here comes the question:
>
> What is the right way to call `f' in order to override
> global value of `x' with the local value defined within
> of function `g' ?
>
This is messy because f() should not have been defined that way.
You can't do it without modifying (a copy of) f().
If the package has a namespace, so that you can't override the definition
of f() it may be impossible.
If you can override the definition of f() you can do something like
environment(f)<-environment()
inside g(). On the other hand, you could then just replace the definition
of f() with one that takes x as an argument.
-thomas
More information about the R-help
mailing list