[R] The assign function in R
p.dalgaard at biostat.ku.dk
Thu Jun 19 10:23:37 CEST 2008
Prof Brian Ripley wrote:
> 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.
Drats... I stand corrected. Thanks to Brian for clearing this up.
> 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:
>>>> 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
>> PLEASE do read the posting guide
>> and provide commented, minimal, self-contained, reproducible code.
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
More information about the R-help