[R] The assign function in R
Prof Brian Ripley
ripley at stats.ox.ac.uk
Thu Jun 19 10:18:31 CEST 2008
For the record, frame=1 and where=1 are not the same thing (whereas
frame=0 and where=0 are both the session database): assign() in S has both
'frame' and 'where' arguments.
where=1 is the first database on the search() path, and is roughly
equivalent to the workspace (although you can attach databases ahead of
the working database in S(-PLUS), people who write code like where=1 often
do not know that).
In S(-PLUS) there is a working database aka chapter, which is the nearest
equivalent to the R workspace but is (conceptually) stored on disc and so
permanent. It is like running R with --restore --save. Unless some other
database is attached at pos=1, the working database is at where=1.
The Blue Book contains the help page for assign() in S ca 1988, and apart
from what where=0 means (which may well be a later addition) the
information is all there.
On Thu, 19 Jun 2008, Peter Dalgaard wrote:
> Duncan Murdoch wrote:
>> Applejus wrote:
>>> Hello,
>>>
>>> I want to convert assign("a", b, where =1 ) from SPLUS to R.
>>> Is it safe to assume that the equivalent of where=1 is pos=1 in R?
>>>
>>> Thanks for help!
>> Only a limited number of users here know what "where=1" means in S-PLUS.
>> If one of those doesn't answer, you might want to explain that for those of
>> us who have forgotten or who never knew.
>>
> Even some of those who should know may have forgotten by now... It is
> detailed in the Blue Book somewhere. As I recall it, the story is (or was?)
> that in S-PLUS objects are mostly on disk and the search path is a list of
> directories. Then there is a stack of evaluation frames plus two special
> frames, frame 0 and frame1. Frame 0 is permanent in the sense that it exists
> for the duration of the session, frame 1 exists during evaluation of
> expressions. Assignments to frame 1 were mostly done to overcome
> communication difficulties caused by the lack of lexical scope in S -- two
> different functions needing to work with the same temporary object would be
> the typical case.
>
> I would conjecture that once the purpose of the assignment to frame 1 is
> understood, you can redesign the code so that it becomes much cleaner,
> possibly by using "<<-" semantics. For a quick port, what you need is some
> sort of temporary environment. Assigning to pos=1 is NOT the solution,
> because that is the global environment and you will (A) risk clobbering an
> existing variable of the same name and (B) litter your workspace with
> intermediate results.
>
> --
> O__ ---- Peter Dalgaard Øster Farimagsgade 5, Entr.B
> c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
> (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
> ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list