Note that one should use inherits = FALSE argument on get and exists to avoid returning objects from the parent, the parent of the parent, etc.
On Fri, Nov 13, 2009 at 2:27 PM, Duncan Murdoch <murd...@stats.uwo.ca> wrote: > On 11/13/2009 2:03 PM, Trishank Karthik Kuppusamy wrote: >> >> Greetings everyone, >> >> I have a question about the default behaviour of a missing entry in an >> environment. >> Let us look at the following sequence of R statements: >> >>> e <- new.env() >>> e$a <- 1 >>> e$a >> >> [1] 1 >>> >>> e$b >> >> NULL >>> >> >> I think I understand the logic for returning NULL to a missing entry in an >> environment, >> but I do not think that it is fully justified. >> I am sure that the R developers must have seen this argument before, >> but I wish to call for attention to this problem again, >> because I think that it is important to the default safety of the R >> programming language. > > You get the same behaviour when asking for a nonexistent element of a list, > or a nonexistent attribute. If you want stricter checking, don't use $, > use get(): > >> get("b", e) > Error in get("b", e) : object 'b' not found > > or check first with exists(): > >> exists("b", e) > [1] FALSE > >> I suppose that one could argue that a good R programmer must be careful >> not to use NULL in any of his environment entries, >> but I think it is better to remove altogether this burden from the >> programmer >> and simply raise a good, old-fashioned exception when the "$" operator >> encounters a missing entry in an environment. > > But then it would be inconsistent with what it does in other situations. > > Duncan Murdoch > >> The biggest advantage is that it will easily eliminate a whole class of >> programming error. >> The biggest disadvantage is that it is not backwards-compatible with old R >> programs. >> >> I suppose a personal solution would be to simply redefine the "$" operator >> in my programs. >> However, I really do think that the default safety of an R environment >> matters very much. >> At the very least, it would be nice to be able to configure the safety of >> a new environment, >> perhaps through a parameter. >> >> -Trishank >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel