[R] [newbie] stack operations, or functions with side effects (or both)

Tom Roche Tom_Roche at pobox.com
Wed Jan 4 22:22:31 CET 2012


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>



More information about the R-help mailing list