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