[R] linear lists, creation, insertion, deletion, traversal *someone?*
Duncan Murdoch
murdoch at stats.uwo.ca
Wed Mar 1 15:08:56 CET 2006
On 3/1/2006 8:09 AM, Christian Hoffmann wrote:
> Hi,
>
> In a second try I will ask this list to give me some useful pointers.
>
> Linear lists, as described e.g. by N.Wirth in "Algorithms and Data
> Structures", seem not to be implemented in S/R, although in lisp we have
> cons, car, cdr.
They are in R as "pairlists" (see ?pairlist), and are used internally,
but are rarely used at the R level; I'd suggest avoiding them.
One other problem with that style of programming is that there is
(almost) no way to have a pointer or reference to an object. (The
"almost" refers to the fact that you can have references to
environments, and could wrap objects in environments to make references
to objects, but this is cumbersome and you probably want to avoid it.)
>
> Nevertheless I want to implement an algorithm using such linear lists,
> porting a trusted program to R (S). I need:
>
> (from Modula/Oberon)
> pSC* = POINTER TO SC;
> SC* = RECORD Next*: pSC; ......
> ... END;
>
> # generate and fill a linked list:
> VAR p, pA, Kol: pSC;
> NEW( Kol);
> pA := Kol;
> while () {
> NEW( p );
> pA.Next := p;
> pA := p;
> ...
> }
>
> Mapping this list management to R's list() is possible, but may not be
> so transparent. Insertions and deletions from a list may be more convoluted.
Insertions and deletions are relatively easy; the difficult part comes
in doing the things that involve references, like your pA.Next above.
You'll need to use vector indexing instead, e.g. you could translate the
code above to
Kol <- list()
repeat {
p <- new_pSC;
Kol <- c(Kol, p)
...
}
and then refer to objects in the list as Kol[[i]], to the tail of the
list as Kol[i:length(Kol)], etc. (Note the distinction between [[ ]]
and [ ]: single brackets give a list, double brackets extract an
element from the list.) Remember that each of these makes a *copy* of
the object; saying
x <- Kol[[2]]
x <- newvalue
has no effect on x.
Duncan Murdoch
>
> Does anybody have experience in this? I could not find any reference in
> R resources, also the Blue Book is mute here.
>
> Thank you
> Christian
More information about the R-help
mailing list