Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R .Last.call feature - similar to .Last.value

Tags:

r

Similarly to .Last.value is there any way to access last call? Below expected results of potential .Last.call.

sum(1, 2)
# [1] 3
str(.Last.call)
#  language sum(1, 2)

The bests if it would not require to parse file from file system.

like image 328
jangorecki Avatar asked May 31 '15 01:05

jangorecki


1 Answers

The last.call package is no longer on cran, but you can still get the code:

# -----------------------------------------------------------------------
# FUNCTION: last.call
#   Retrieves a CALL from the history and returns an unevaluated 
#   call.
#
#   There are two uses for such abilities.  
#   - To be able to recall the previous commands, like pressing the up key
#     on the terminal.
#   - The ability to get the line that called the function.
#   
#   TODO:
#   - does not handle commands seperated by ';'
#
# -----------------------------------------------------------------------

last.call <-
function(n=1) {

 f1 <- tempfile()
 try( savehistory(f1), silent=TRUE ) 
 try( rawhist <- readLines(f1), silent=TRUE )
 unlink(f1)

 if( exists('rawhist') ) { 

   # LOOK BACK max(n)+ LINES UNTIL YOU HAVE n COMMANDS 
   cmds <- expression() 
   n.lines <- max(abs(n)) 
   while( length(cmds) < max(abs(n)) ) { 
      lines <- tail( rawhist, n=n.lines )
      try( cmds <- parse( text=lines ), silent=TRUE ) 
      n.lines <- n.lines + 1 
      if( n.lines > length(rawhist) ) break 
   }
   ret <- rev(cmds)[n] 
   if( length(ret) == 1 ) return(ret[[1]]) else return(ret) 

 }

 return(NULL)

}

Now, to use it:

sum(1, 2)
# [1] 3
last.call(2)
# sum(1, 2)
like image 101
Jota Avatar answered Oct 19 '22 22:10

Jota