[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
inside g().  On the other hand, you could then just replace the definition 
of f() with one that takes x as an argument.


More information about the R-help mailing list