r - Function with extra parameters from another function's input -
this relatively problem i'm stumped. programming in r, don't think problem restricted r. below i've tried write simple code demonstrating problem:
f1 = function(x) { return(a + x) } f2 = function(ftn) { return(ftn(1)) } f3 = function(a) { return(f2(f1)) }
the problem: if call f3(2) [for example], f2(f1) returned, , f2(f1) returns f1(a+1). f1 not recognize value of 'a' put in f3, code doesn't work! there way can make f1 recognizes input f3?
r uses lexical scope, not dynamic scope. functions free variables (variables used not defined within them) in environment in function defined. f1
defined in global environment a
looked in global environment , there no a
there. can force f1
free variables in running instance of f3
this:
f3 = function(a) { environment(f1) <- environment() return(f2(f1)) }
this temporarily creates new f1
within f3
desired environment.
another possibility if f1
needed within f3
define f1
there (rather in global environment):
f3 = function(a) { f1 = function(x) { return(a + x) } return(f2(f1)) }
by way, last expression evaluated in running function returned written:
f3 <- function(a) { f1 <- function(x) + x f2(f1) }
Comments
Post a Comment