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

Duncan Murdoch murdoch at stats.uwo.ca
Tue May 9 03:23:56 CEST 2006


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



More information about the R-devel mailing list