...
这是一个使用对象传递参数的实际示例,并且*apply
. 它很光滑,这似乎是一个解释使用的简单示例。要记住的重要一点是,当您定义一个参数时,因为...
对该函数的所有调用都必须具有命名参数。(所以 R 明白你想把什么放在哪里)。例如,我本可以调用times <- fperform(longfunction, 10, noise = 5000)
,但离开noise =
会给我一个错误,因为它正在通过...
我的个人风格是命名所有参数,如果 a...
只是为了安全而使用。
您可以看到参数noise
是在调用中定义的,fperform(FUN = longfunction, ntimes = 10, noise = 5000)
但没有被用于另外 2 个级别,diff <- rbind(c(x, runtime(FUN, ...)))
最终调用fun <- FUN(...)
# Made this to take up time
longfunction <- function(noise = 2500, ...) {
lapply(seq(noise), function(x) {
z <- noise * runif(x)
})
}
# Takes a function and clocks the runtime
runtime <- function(FUN, display = TRUE, ...) {
before <- Sys.time()
fun <- FUN(...)
after <- Sys.time()
if (isTRUE(display)) {
print(after-before)
}
else {
after-before
}
}
# Vectorizes runtime() to allow for multiple tests
fperform <- function(FUN, ntimes = 10, ...) {
out <- sapply(seq(ntimes), function(x) {
diff <- rbind(c(x, runtime(FUN, ...)))
})
}
times <- fperform(FUN = longfunction, ntimes = 10, noise = 5000)
avgtime <- mean(times[2,])
print(paste("Average Time difference of ", avgtime, " secs", sep=""))