2012-06-07 3 views
5

Gibt es in R eine No-Op-Funktion, so dass sie, selbst wenn die Parameter teuer zu bewerten wären, sofort zurückkehrt? Ich suche nach einem bedingten Ersatz der stopifnot Funktion.No-Op-Funktion als bedingter Ersatz für stopifnot()

> noop(runif(1e20)) 
# returns immediately and uses no memory 

Antwort

9

ich denke, das tun würde:

noop <- function(...) invisible(NULL) 

als lazy evaluation hier zur Rettung kommt:

R> system.time(replicate(1e4, noop(runif(1e2)))) 
    user system elapsed 
    0.01 0.00 0.01 
R> system.time(replicate(1e4, noop(runif(1e5)))) 
    user system elapsed 
    0.01 0.00 0.02 
R> system.time(replicate(1e4, noop(runif(1e8)))) 
    user system elapsed 
    0.01 0.00 0.01 
R> system.time(replicate(1e4, noop(runif(1e11)))) 
    user system elapsed 
    0.01 0.00 0.01 
R> 

so, auch wenn wir N keine Laufzeiterhöhung erhöhen zu sehen ist.

+0

Vielen Dank. Ist so etwas in der Basis oder in einem Paket vordefiniert? – krlmlr

+0

Nicht, dass ich weiß, also fügen Sie einfach die eine Zeile zu Ihrer ~/.Rprofile oder Rprofile.site oder ... –