2015-05-31 7 views
5

Gibt es, wie bei .Last.value, eine Möglichkeit, auf den letzten Anruf zuzugreifen? Unterhalb der erwarteten Ergebnisse des Potentials .Last.call.R .Last.call-Funktion - ähnlich wie .Last.value

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

Die Bestzeiten, wenn es erforderlich wäre nicht Datei aus dem Dateisystem zu analysieren.

+3

[wörtlich der erste Treffer bei Google, wenn ich getippt "R letzten Anruf"] (http://www.inside-r.org/packages/cran/last.call/docs/last.call) – shadowtalker

+0

Also posten Sie es als eine Antwort –

+0

@MikeWise Ich denke, ihr Punkt ist, dass die OP sollte sich bemüht haben, die Antwort zu finden, anstatt dass dies der erste Stopp ist. –

Antwort

3

Das last.call Paket ist nicht mehr auf Cran, aber man kann immer noch den Code erhalten:

# ----------------------------------------------------------------------- 
# 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) 

} 

Nun, es zu benutzen:

sum(1, 2) 
# [1] 3 
last.call(2) 
# sum(1, 2) 
+1

Ich spielte mit ihm auch gerade jetzt :). Funktioniert nicht, wenn Sie den Code "Quelle", alles zählt als eine Zeile. –

Verwandte Themen