r - 嵌套函数是否更慢?

标签 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 ,所以我猜很多人都打了 Foo在解决方案 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())

在这里,当我运行它很多次。然后看起来很有可比性。如果您想加快代码速度,这不太可能是您放慢速度的地方。但最好还是测试“真实世界”的场景以确保安全。

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

关于r - 嵌套函数是否更慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24521414/

相关文章:

使用 RSelenium 从网页表中检索数据

python - 使用 NumPy 高效返回带有小数分量的插入点索引

performance - 在 F# 中有效地投影列表列表

javascript - 将循环函数的值存储到变量中,javascript

C 编译器访问全局 T const * const obj 的未定义行为,其底层对象可能会更改?

r - 纵向数据

r - dplyr-0.6.0 编程取消引用

reshape 数据框以在列中创建唯一值列表

windows - 低延迟/高性能网络(以太网)消息传递

python - 了解 Python 风格,函数的默认参数