嵌套函数是否更慢?

时间:2014-07-02 01:06:07

标签: r performance function nested nested-function

定义一个子函数被父函数内部的父函数调用(作为嵌套函数)更慢?

例如假设解决方案1:

Foo <- function(x) {

    Baz <- function(y) {
    #... do something
    }
    #... do something and call Baz, for instance
    sapply(x, Baz)
}

或者解决方案2:

Baz <- function(y) {
#... do something
}

Foo <- function(x) {

    #... do something and call Baz, for instance
    sapply(x, Baz)
}

在解决方案1中,在运行Baz时有一个额外的定义Foo的过程,因此我猜在解决方案1中对Foo的许多调用会稍慢。这是真的吗?

1 个答案:

答案 0 :(得分:5)

如果不查看特定功能和输入数据,很难预测速度/效率。什么加速一种类型的过程可能不一定对另一种过程有利。您可以尝试像

这样的简单基准测试
m1<- function() {
    x<-rep(runif(100))
    Baz <- function(y) {
        mean(y)
    }
    sapply(x, Baz)
}

Baz <- function(y) {
        mean(y)
}
m2 <- function() {
    x<-rep(runif(100))
    sapply(x, Baz)
}

library(microbenchmark)
microbenchmark(m1(), m2())

这时我跑了很多次。然后看起来非常可比。如果您正在尝试加速代码,那么这不太可能是您放慢速度的地方。但是,测试现实世界&#34;会更好。场景只是为了确定。

创建闭包时,嵌套函数的重要性确实存在。子功能可以访问父功能的环境。这可以是一个非常强大的工具。