[R] on lexical scoping....
Mark Leeds
m@rk|eed@2 @end|ng |rom gm@||@com
Wed Apr 5 14:52:40 CEST 2023
Hi Duncan. I read it a looooong time ago so it's probably best if
I read it again ALONG with your corrections. Every detail matters
with these concepts so thanks a lot.
Mark
On Wed, Apr 5, 2023 at 5:12 AM Duncan Murdoch <murdoch.duncan using gmail.com>
wrote:
> It seems mostly correct. Here are a few quibbles:
>
> - I don't think "owner" is a good description of the parent environment.
> Usually when I use owner in computing, there's an implication that the
> owner controls what it owns, is responsible for allocating and
> destroying it, etc. Parent environments are targets of a pointer from
> other environments that list them as their "enclosure", but they have no
> record of their children.
>
> - The analogy that all roads lead to the search list is wrong. There's
> no reason you couldn't create an environment whose parent was the empty
> environment. But with the qualifier "when we start in R_GlobalEnv" it's
> correct, so this complaint is just about the wording.
>
> - The description of what Imports does is wrong. What is described
> there is what the `import()` directive in NAMESPACE does. The Imports
> line in DESCRIPTION just guarantees that the named package is loaded, it
> doesn't import anything. And the `importFrom()` directive in NAMESPACE
> isn't discussed.
>
> - It gets bad near the end in the "Curveball" section. I'd just skip
> that. It's not at all true that all functions in a package have the
> package's namespace environment as their environment. There are lots of
> real examples where that's not true. Functions that maintain persistent
> records (e.g. the base function conflictRules()) often have a private
> environment, and occasionally packages import functions from other
> packages by simple assignment, so they end up in the namespace
> environment of the importer but still have the namespace environment of
> the exporter associated with them. And the last diagram (the revised
> one with all solid lines) is just misleading.
>
> Duncan
>
> On 04/04/2023 7:53 p.m., Mark Leeds wrote:
> > obviously, everyone has different opinions on what's useful but I always
> > found this document quite
> > helpful. I think, in the past, someone said that there are some incorrect
> > statements in but I'm not sure
> > what they are.
> >
> >
> https://askming.github.io/study_notes/Stats_Comp/Note-How%20R%20searches%20and%20finds%20stuff.html
> >
> >
> > On Tue, Apr 4, 2023 at 7:06 PM Bert Gunter <bgunter.4567 using gmail.com>
> wrote:
> >
> >> The following *might* be of use to you. If you can predict what the
> various
> >> function invocations will do, I think you have a reasonable grasp of how
> >> lexical scoping works in R (contrary or supplementary opinions welcome).
> >> It is the sort of thing you will find in the references also. If this is
> >> all obvious, sorry for wasting your time.
> >> #######################
> >> search()
> >> ls()
> >> dat <- list(x =2)
> >> attach(dat,2)
> >> search()
> >> f <- function(){
> >> g <- function() x
> >> x <- 3
> >> g}
> >> h <- f()
> >> g <- function()x
> >> ls()
> >> h()
> >> g()
> >> detach(dat)
> >> h()
> >> g()
> >>
> >> ##########################
> >> ## Here is what this gives starting with an empty .GlobalEnv.
> >> ##################################
> >>
> >>> search()
> >> [1] ".GlobalEnv" "package:tools" "package:lattice"
> >> "tools:rstudio"
> >> [5] "package:stats" "package:graphics" "package:grDevices"
> >> "package:utils"
> >> [9] "package:datasets" "package:methods" "Autoloads"
> >> "package:base"
> >>> ls()
> >> character(0)
> >>> dat <- list(x =2)
> >>> attach(dat,2)
> >>> search()
> >> [1] ".GlobalEnv" "dat" "package:tools"
> >> "package:lattice"
> >> [5] "tools:rstudio" "package:stats" "package:graphics"
> >> "package:grDevices"
> >> [9] "package:utils" "package:datasets" "package:methods"
> >> "Autoloads"
> >> [13] "package:base"
> >>> f <- function(){
> >> + g <- function() x
> >> + x <- 3
> >> + g}
> >>> h <- f()
> >>> g <- function()x
> >>> ls()
> >> [1] "dat" "f" "g" "h"
> >>> h()
> >> [1] 3
> >>> g()
> >> [1] 2
> >>> detach(dat)
> >>> h()
> >> [1] 3
> >>> g()
> >> Error in g() : object 'x' not found
> >>
> >> -- Bert
> >>
> >>
> >> On Tue, Apr 4, 2023 at 6:56 AM akshay kulkarni <akshay_e4 using hotmail.com>
> >> wrote:
> >>
> >>> Dear Members,
> >>> I have the following code typed at the
> >>> console prompt:
> >>>
> >>> y <- x*10
> >>>
> >>> X has not been defined and the above code throws an object not found
> >>> error. That is, the global environment does not contain x. Why doesn't
> it
> >>> look further in the environment stack, like that of packages? There are
> >>> thousands of packages that contain the variable named x. Of course,
> that
> >>> happens if the above code is in a function (or does it?).
> >>>
> >>> What concept of R is at work in this dichotomy?
> >>>
> >>> THanking you,
> >>> Yours sincerely,
> >>> AKSHAY M KULKARNI
> >>>
> >>> [[alternative HTML version deleted]]
> >>>
> >>> ______________________________________________
> >>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> >>> https://stat.ethz.ch/mailman/listinfo/r-help
> >>> PLEASE do read the posting guide
> >>> http://www.R-project.org/posting-guide.html
> >>> and provide commented, minimal, self-contained, reproducible code.
> >>>
> >>
> >> [[alternative HTML version deleted]]
> >>
> >> ______________________________________________
> >> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide
> >> http://www.R-project.org/posting-guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
> >>
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list