【问题标题】:Are nested functions slower?嵌套函数更慢吗?
【发布时间】:2014-07-02 01:06:07
【问题描述】:

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

例如假设解决方案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 中,在运行 Foo 时有一个额外的定义 Baz 的过程,所以我猜在解决方案 1 中对 Foo 的许多调用会稍微慢一些。是真的吗?

【问题讨论】:

    标签: r performance function nested nested-function


    【解决方案1】:

    如果不查看特定功能和输入数据,很难预测速度/效率。加速一种类型的过程可能不一定对另一种有好处。您可以尝试一个简单的基准,例如

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

    当我运行它很多次时。然后显得很有可比性。如果您试图加快代码速度,那么这不太可能是您放慢速度的地方。但为了确定,最好测试“真实世界”的场景。

    当你创建闭包时,嵌套函数的重要性就体现出来了。子函数可以访问父函数的环境。这可能是一个非常强大的工具。

    【讨论】:

      猜你喜欢
      • 2021-03-13
      • 2018-07-11
      • 2021-09-06
      • 2017-04-06
      • 2011-09-06
      • 2014-06-30
      • 2012-05-27
      • 1970-01-01
      相关资源
      最近更新 更多