R es un lenguaje funcional y a la vez tiene la característica de evaluación perezosa, es decir que no ejecuta código solo hasta que lo necesita. Parece rara esta característica pero es muy útil.
Supongamos lo siguiente:
> fx <- function() {
+ print("codigo muy costoso...")
+ }
> fx
function() {
print("codigo muy costoso...")
}
> fx()
[1] "codigo muy costoso..."
> otraFx <- function (i, f) { if (i > 10) f() }
> otraFx(2,fx)
> otraFx(20,fx)
[1] "codigo muy costoso..."
>
Por lo tanto la función fx no se ejecuta si no es necesario, otro ejemplo:
> f <- function(x) {
10
}
> f(stop("This is an error!"))
> [1] 10
Podemos forzar que ejecute el código, con force (que original) :
> f <- function(x) {
force(x)
10
}
> f(stop("This is an error!"))
#> Error in force(x): This is an error!
Una interesante característica, sin más dejo link:
http://adv-r.had.co.nz/Functions.html