[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