From murdoch at stats.uwo.ca  Tue May  9 15:31:12 2006
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Tue, 09 May 2006 09:31:12 -0400
Subject: [Rd] "Unfelicity" :-) with edit()
In-Reply-To: <20060509131705.GA3969@alcyon.progiciels-bpi.ca>
References: <20060509010355.GA25342@alcyon.progiciels-bpi.ca>
	<445FEF2C.5000800@stats.uwo.ca>
	<20060509131705.GA3969@alcyon.progiciels-bpi.ca>
Message-ID: <446099A0.1000309@stats.uwo.ca>

On 5/9/2006 9:17 AM, Fran?ois Pinard wrote:
> [Duncan Murdoch]
> 
>>I'll fix it.
> 
> Thanks, Duncan.  While I quite understand that more serious work should 
> be done within real sources files, fixing and editing is still useful 
> for quick, evanescent interactive toying.
> 
>>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.
> 
> This is not the first time I read such a remark.  Maybe it would be 
> worth a note within ?edit.
> 
>>There is no way it could preserve the environment of a function [...]
> 
> That might be worth another note within ?edit.
> 
> Speaking of which, this "x <- edit()" usage (interactively suggested by 
> fix when it fails to re-parse the result of edition) is not covered by 
> ?edit.  I mean that by reading ?edit, one does not get information about 
> what a mere "edit()" does.  It might be useful that ?edit says a few 
> words about this particular usage.

Yes, it probably would be.  Just to clarify:  fix(f) *does* preserve the 
environment of f, but

fix(f) # introduce a syntax error
f <- edit()

does not.

Duncan Murdoch

> 
> The remaining of this message quotes the original message:
> 
> [Fran?ois Pinard]
>>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 ?
>



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