下面是使用...
對象和*apply
傳遞參數的實際示例。這是光滑的,這似乎是一個簡單的例子來解釋使用。需要記住的重要一點是,當您將參數定義爲...
時,對該函數的所有調用都必須具有命名參數。 (所以R理解你想要放在哪裏)。例如,我本可以撥打times <- fperform(longfunction, 10, noise = 5000)
,但是離開noise =
會給我一個錯誤,因爲它是通過...
傳遞的。我的個人風格是如果使用...
只是爲了安全起見,我將命名所有參數。
你可以看到參數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=""))
來源
2012-10-08 19:05:49
Rob
謝謝,大通,這是我正在尋找... – Produnis
@Gavin - 我想我不明白在清晰度或性能的差異點。 R的文檔非常清楚,'...'是針對'FUN'的其他參數,因此請注意。然而,這僅僅是需要匿名函數功能的複雜性的一個小小的飛躍,我猜測OP以前並不知道這個「技巧」。 – Chase
確實,因此是評論而不是反對票。你寫的東西沒有錯。並不意味着批評。 –