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中的许多调用会稍慢.这是真的吗?
如果不查看特定的功能和输入数据,很难预测速度/效率.什么加速一种类型的过程可能不一定对另一种过程有利.您可以尝试一个简单的基准测试
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)
在这里,我运行了很多次.然后看起来非常可比.如果您正在尝试加速代码,那么这不太可能是您放慢速度的地方.但是为了确保测试"真实世界"场景更好.
当您创建闭包时,嵌套函数的重要性确实存在.子函数可以访问父函数的环境.这可以是一个非常强大的工具.