[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