[R] How to get the namespace of a function?

Gabor Grothendieck ggrothendieck at gmail.com
Thu Feb 2 23:31:38 CET 2006


R largely makes everything open (at least relative to languages that
have strict encapsulation) and I think you simply need to accept that
when using R.  There are benefits to both approaches (the R approach
generally involves less code which is particularly important when entering
code into the console and in small programs which are more the domain
of R whereas the encapsulation approach can catch more
errors which is more important in large programs).    You could use a
variable name convention that makes collisions
less likely but overall R is not java and I think one just has to accept that
or use a different language.

Also, there are some tools in the codetools package that you could use
to check your variables.

On 2/2/06, Fernando Saldanha <fsaldan1 at gmail.com> wrote:
> I am trying to imitate "encapsulation" from other languages like Java
> or C++. Coming from that background, it bothers me that I can commit
> errors like the following:
>
> > x <- 1
> > f <- function(z) { y <- x; y + 1 } # Mistake: I should have written y <- z
> > f(10)
> [1] 2
>
> In a language like Java the interpreter would have noticed that x was
> an undeclared variable and an error message would be issued. R, on the
> other hand, allows the code to run, as x exists in the global
> environment. I was trying to avoid such situations by  setting the
> environment of f to be NULL. If there is a better way to catch this
> type of errors I would be interested in knowing about it.
>
> FS
>
> On 2/2/06, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> > On 2/2/2006 10:56 AM, Fernando Saldanha wrote:
> > > I declared the environment of the function myfun to be NULL as follows:
> > >
> > > environment(myfun) <- NULL
> >
> > Since version 2.1.0, it's been recommended that you use
> >
> > environment(myfun) <- baseenv()
> >
> > and since 2.2.0, you'll get a warning when using NULL (and you'll get an
> > error in 2.3.0).  But why would you want to do that?  What are you
> > trying to achieve?
> >
> > Duncan Murdoch
> >
> >
> > >
> > > Later on I called that myfun and got an error message because the
> > > function index() in the zoo package was called inside myfun and was
> > > not visible:
> > >
> > > Error in myfun(args) : couldn't find function "index"
> > >
> > > I tried to use zoo::index() instead of index(), but that did not work.
> > > In fact, zoo::index does not work even in the command line:
> > >
> > >> z<-ts(1:5)
> > >> z
> > > Time Series:
> > > Start = 1
> > > End = 5
> > > Frequency = 1
> > > [1] 1 2 3 4 5
> > >> index(z)
> > > [1] 1 2 3 4 5
> > >> zoo::index(z)
> > > Error in loadNamespace(name) : package 'zoo' does not have a name space
> > >
> > > How can I qualify index() so that it is visible inside the body of myfun?
> > >
> > > Thanks for any suggestions,
> > >
> > > FS
> > >
> > > ______________________________________________
> > > R-help at stat.math.ethz.ch mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
> >
> >
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>




More information about the R-help mailing list