# [R] .Last.value or % or ANS or ... (was unix)

Mark Myatt mark at myatt.demon.co.uk
Wed Nov 8 09:50:02 CET 2000

```Bill Simpson <wsi at gcal.ac.uk> writes:

>On Tue, 7 Nov 2000, Mark Myatt wrote:
>
>> Yves Gauvreau <cyg at sympatico.ca> writes:
>> >... and Matlab uses "ans" and Mathematica effectively uses %, %%
>> >
>> >Would be nice to have something simpler than .Last.value
>>
>> Perhaps I am stating the obvious or being extremely stupid but you can
>> create a function:
>>
>>         lv <- function()
>>          {
>>          .Last.value
>>          }
>>
>> And then use lv() whenever you need .Last.value.
>
>How do you say "give me the output I saw three steps ago?" In Mathematica
>you would use %%% or Out[-3].

Why not implement a LIFO stack? Here is a first attempt:

#
# Flush the stack
# (call this to create the stack)
#
flush <- function()
{
stack <<- list()
}

#
# Push a value onto the stack
#
push <- function()
{
stack <<- c(stack, .Last.value)
}

#
# Pull a value from the stack
# (default is last pushed value)
#
pull <- function(x = 0)
{
stack[[length(stack) - x]]
}

#
# Pull a value from the stack and remove it
# (default is last pushed value)
#
pop <- function(x = 0)
{
pop <- stack[[length(stack) - x]]
stack <<- stack[-length(stack) + x]
pop
}

You still need to push() the values you want to keep onto the stack.
Another limitations of the above code is that objects are stored as
'atoms':

> flush()
> a <- c(1,2,3,4,5)
> mean(a)
[1] 3
> push()
> stack
[[1]]
[1] 3

> a
[1] 1 2 3 4 5
> push()
> stack
[[1]]
[1] 3

[[2]]
[1] 1

[[3]]
[1] 2

[[4]]
[1] 3

[[5]]
[1] 4

[[6]]
[1] 5

> pull(1)
[1] 4
> pop(1)
[1] 4
> stack
[[1]]
[1] 3

[[2]]
[1] 1

[[3]]
[1] 2

[[4]]
[1] 3

[[5]]
[1] 5

Which makes it pretty useless for vector and matrix results but there
should be a way round that.

Mark

--
Mark Myatt

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```