Am Sat, 6 May 2017 11:17:42 -0400 schrieb Michael Friendly <frien...@yorku.ca>:
> On 5/5/2017 10:23 AM, Ralf Goertz wrote: > > Am Fri, 05 May 2017 07:14:36 -0700 > > schrieb Jeff Newmiller <jdnew...@dcn.davis.ca.us>: > > > >> R normally prompts you to save .RData, but it just automatically > >> saves .Rhistory... the two are unrelated. > > > > Not here. If I say "n" to the prompted question "Save workspace > > image? [y/n/c]: " my history doesn't get saved. > > > > Version: > > > > R version 3.3.1 (2016-06-21) -- "Bug in Your Hair" > > Copyright (C) 2016 The R Foundation for Statistical Computing > > Platform: x86_64-suse-linux-gnu (64-bit) > > > > On Windoze, here's what I use in my .Rprofile, which runs every time > I start an RGUI coonsole. The key is .First & .Last to load/save > history automagically. Hi Michael, thanks. This helps with saving the history without saving the data. But actually I'd really like to save both and still be able to load functions automatically from .Rprofile. Not saving the data as Jeff suggested is not a good option because it is sometimes tedious to rebuild my environment by reexecuting commands in the history. And I explained in my OP why I can't use .First() to achieve my goal. But let me try again to explain the problem because I think not everybody understood what I was trying to say. For simplicity I use the plain variable "a" instead of a function. Start a fresh session and remove all variables, define one variable and quit with saving: > rm(list=ls()) > a=17 > quit(save="yes") Now, before opening a new session edit .Rprofile such that it contains just the two lines: print("Hello from .Rprofile") a=42 Start a new session where your saved environment will be loaded. Observe that you see the line [1] "Hello from .Rprofile" proving that the commands in .Rprofile have been executed. Now look at "a": > a [1] 17 You would expect to see this because *after* your "Hello" line you find [Previously saved workspace restored] So you have set "a" to 42 in .Rprofile but it gets overwritten from the previously saved and now restored workspace. On the other hand, .First() gets executed after the restoring of the workspace. Therefore, I could edit .Rprofile to read .First=function(){ assign("a",42,pos=1) } Now, after starting I see that "a" is indeed 42. But then it turns out that from now on I need "a" to be 11. After editing .Rprofile accordingly, I am quite hopeful but after starting a new session I see that "a" is still 42. Why is that? Because .First() was saved and when I started a new session it got a new function body (setting "a" to 11) but before it could be executed it was again overwritten by the old value (setting "a" to 42) and I am chasing my own tail. Sigh. .Last() doesn't help. Apparently (at least on my linux system) it is executed *after* saving the environment so too late to remove anything you don't want saved. In that regard linux doesn't seem to be typical, since in "?.Last" the reverse order is described as typical: Exactly what happens at termination of an R session depends on the platform and GUI interface in use. A typical sequence is to run ‘.Last()’ and ‘.Last.sys()’ (unless ‘runLast’ is false), to save the workspace if requested (and in most cases also to save the session history: see ‘savehistory’), then run any finalizers (see ‘reg.finalizer’) that have been set to be run on exit, close all open graphics devices, remove the session temporary directory and print any remaining warnings (e.g., from ‘.Last()’ and device closure). IMHO this is a design flaw. Ralf ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.