[R] [newbie] stack operations, or functions with side effects (or both)
Patrick Burns
pburns at pburns.seanet.com
Thu Jan 5 09:39:19 CET 2012
There is a crude implementation of
stacks in 'S Poetry' (available on
www.burns-stat.com). I haven't looked
at it, but I'd guess that code would
work in R as well.
On 04/01/2012 21:22, Tom Roche wrote:
>
> summary: Specifically, how does one do stack/FIFO operations in R?
> Generally, how does one code functions with side effects in R?
>
> details:
>
> I have been a coder for years, mostly using C-like semantics (e.g.,
> Java). I am now trying to become a scientist, and to use R, but I don't
> yet have the sense of "good R" and R idiom (i.e., expressions that are
> to R what (e.g.) the Schwartzian transform is to Perl).
>
> I have a data-assimilation problem for which I see a solution that
> wants a stack--or, really, just a pop(...) such that
>
> * s<- c(1:5)
> * print(s)
> [1] 1 2 3 4 5
> * pop(s)
> [1] 1
> * print(s)
> [1] 2 3 4 5
>
> but in fact I get
>
>> pop(s)
> Error: could not find function "pop"
>
> and Rseek'ing finds me nothing. When I try to write pop(...) I get
>
> pop1<- function(vector_arg) {
> + length(vector_arg) -> lv
> + vector_arg[1] -> ret
> + vector_arg<<- vector_arg[2:lv]
> + ret
> + }
>>
>> pop1(s)
> [1] 1
>> print(s)
> [1] 1 2 3 4 5
>
> i.e., no side effect on the argument
>
> pop2<- function(vector_arg) {
> + length(vector_arg) -> lv
> + vector_arg[1] -> ret
> + assign("vector_arg", vector_arg[2:lv])
> + return(ret)
> + }
>>
>> pop2(s)
> [1] 1
>> print(s)
> [1] 1 2 3 4 5
>
> ditto :-( What am I missing?
>
> * Is there already a stack API for R (which I would expect)? If so, where?
>
> * How to cause the desired side effect to the argument in the code above?
>
> TIA, Tom Roche<Tom_Roche at pobox.com>
>
> ______________________________________________
> 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.
>
--
Patrick Burns
pburns at pburns.seanet.com
twitter: @portfolioprobe
http://www.portfolioprobe.com/blog
http://www.burns-stat.com
(home of 'Some hints for the R beginner'
and 'The R Inferno')
More information about the R-help
mailing list