r - How to avoid nested function definitions and still use <<- operator -
suppose have these 2 functions:
finner<-function() { # complicated stuff, and... i<<-i+1 } fouter<-function() { i<-0 finner() print(i) } calling fouter() produces error: error in finner() : object 'i' not found. know, 1 way of fixing re-write example into
fouter<-function() { finner<-function() { i<<-i+1 } i<-0 finner() print(i) } but if don't want nest functions way? in case finner heavy , complicated function (which might want move library), , fouter ad-hoc created function defines 1 iterator. have many fouter-class functions in code, nesting them require duplicating finner inside every single little 1 iterator definition.
i suspect solution has environments, don't know how it. can help?
you need access environment associated fouter function--where call finner is. can parent.frame, , can , set variables get , assign:
finner<-function() { assign("i", get("i", envir=parent.frame()) + 1, envir=parent.frame()) } fouter<-function() { i<-0 finner() print(i) } see ?environment , ?parent.frame more info.
but satisfy curiosity! seem agree not idea. manipulating environments , names can complicated, , unless you're doing complex, there's better way.
Comments
Post a Comment