From murdoch at stats.uwo.ca  Tue May  9 03:23:56 2006
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Mon, 08 May 2006 21:23:56 -0400
Subject: [Rd] "Unfelicity" :-) with edit()
In-Reply-To: <20060509010355.GA25342@alcyon.progiciels-bpi.ca>
References: <20060509010355.GA25342@alcyon.progiciels-bpi.ca>
Message-ID: <445FEF2C.5000800@stats.uwo.ca>

On 5/8/2006 9:03 PM, Fran?ois Pinard wrote:
> Hi, people.  This is about R 2.3.0 under Linux.
> 
> It seems that edit() may change a function environment.  Here is 
> a transcript, more comments follow:
> 
> ======================================================================>
>> fix(f)
> 
>> f
> function ()
> {
> }
> 
>> fix(f)
> Erreur dans edit(name, file, title, editor) :
>         une erreur s'est produite ? la ligne 3
>  utilisez une commande du genre
>  x <- edit()
>  pour corriger
> 
>> f <- edit()
> 
>> f
> function ()
> {
> }
> <environment: base>
> ======================================================================<
> 
> The initial ``fix(f)`` called an editor, which I exited right away.  For 
> the second ``fix(f)``, I used the editor for adding a slash between 
> braces, and exited.  The French comment produced by R speaks about an 
> error at line 3 and suggests using something like ``x <- edit()`` to 
> make a correction.  On the third call to the editor, I remove the slash 
> and exit.  Now, the environment of the function became "base".
> 
> This has unfortunate effects when editing a more substantial function, 
> because for example, "stats" or "utils" is not readily available anymore 
> after the editing.  Is it reasonable to suggest an improvement in the 
> mechanics of edit(), for alleviating this drawback ?

edit() is a hack, so you should expect problems.  You're better off 
keeping your source in an editor and using source() to get it.  There is 
no way it could preserve the environment of a function if you go through 
the steps you went through above.

However, it's a bug (introduced by me last year when converting NULL to 
.BaseEnv) that it ends up with the base environment instead of the 
global environment.  I'll fix it.

Duncan Murdoch



[Rd] "Unfelicity" :-) with edit()
Duncan Murdoch