On May 16, 2012, at 1:10 PM, R. Michael Weylandt wrote:

> Suppose I have the following very simple ~/.Rprofile
> 
> .First <- function(){
>    assign("e", exp(1), .GlobalEnv)
>    lockBinding("e", .GlobalEnv)
> }
> 
> If I start R from the terminal, all is fine, but if I use R.app this
> throws an error about not being able to change the assigned value of a
> locked binding on "e". This makes me think that R.app hits .First()
> twice -- is that the intended behavior? [You can demonstrate this with
> cat() statements more directly, but I figured I'd show a use case]
> 
> I don't have access to another computer right now to confirm, but the
> difference between Terminal and R.app seems funny. If it seems to be a
> problem with my machine, I'll hunt further.
> 

It is somewhere between intention and a bug. It is caused by the necessity of 
the R.app GUI to deal with launches in a different working directory -- e.g. 
when you drag a folder on the GUI. Because the GUI has to setup R and start the 
event loop before it can accept open events it emulates the regular R behavior 
after receiving the open event by starting R with --no-restore-data first and 
then loading the workspace "by hand" and running .First(). This is all fine if 
you use your workspace to populate .First, but if you do that in .Renviron then 
.First gets called twice: first when R starts without a workspace and then by 
the GUI because it doesn't know that your .First does not come from the loaded 
workspace. 

Obviously, an easy work-around is to check with bindingIsLocked().

That said, I have added a very, very ugly hack to work around your case in the 
GUI.

Cheers,
Simon

_______________________________________________
R-SIG-Mac mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-mac

Reply via email to