[R] How to get the namespace of a function?
Berton Gunter
gunter.berton at gene.com
Thu Feb 2 23:56:44 CET 2006
Just echoing and slightly amplifying Gabor's comment...
The semantics of R are really based on functional programming (LISP-like)
rather than OOP (JAVA-like)? R's behavior is "proper" from that point of
view; what is "improper" is Fernando's expectation that it should behave
some other way. Of course, one can simulate anything with a Turing machine,
but I consider Fernando's criticisms somewhat "unfair" because he is
expecting R to behave like something he is familiar with rather than as it
was designed to. For this reason, what bothers him seems wholly desirable to
me -- I want there to be well-defined scoping convention (lexical scoping)
for R to find free variables.
Cheers,
Bert
-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Duncan Murdoch
Sent: Thursday, February 02, 2006 2:16 PM
To: fsaldanha at alum.mit.edu
Cc: r-help at stat.math.ethz.ch
Subject: Re: [R] How to get the namespace of a function?
On 2/2/2006 5:05 PM, Fernando Saldanha 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.
Put your code in a package, and use a namespace. This isn't perfect,
but it gives you more control than you have when running scripts at the
console.
There's an article by Luke Tierney in one of R News 3/1 that explains
the search order when namespaces are involved.
Duncan Murdoch
>
> 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