嵌套函数是否更慢?

Ali*_*Ali 4 performance nested r function nested-function

定义子函数是由父函数内部的父函数(作为嵌套函数)调用的吗?

例如,假设解决方案1:

Foo <- function(x) {

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

或者解决方案2:

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

Foo <- function(x) {

    #... do something and call Baz, for instance
    sapply(x, Baz)
}
Run Code Online (Sandbox Code Playgroud)

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

MrF*_*ick 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())
Run Code Online (Sandbox Code Playgroud)

在这里,我运行了很多次.然后看起来非常可比.如果您正在尝试加速代码,那么这不太可能是您放慢速度的地方.但是为了确保测试"真实世界"场景更好.

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