定义由父函数内部的父函数调用的子函数(作为嵌套函数)是否更慢?
例如假设解决方案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/