ここでは、...
オブジェクトと*apply
を使用して引数を渡す具体的な例を示します。これは滑らかで、これはその使い方を説明する簡単な例のようです。覚えておくべき重要な点は、引数を...
と定義すると、その関数へのすべての呼び出しに名前付き引数が必要であることです。 (Rはどこに配置しようとしているのかを理解しているので)たとえば、私はtimes <- fperform(longfunction, 10, noise = 5000)
と呼んでいたかもしれませんが、を渡すとエラーが表示されます。...
私の個人的なスタイルは、...
が安全のために使用されている場合、すべての引数に名前を付けることです。
あなたは、引数noise
がfperform(FUN = longfunction, ntimes = 10, noise = 5000)
への呼び出しで定義されているが、diff <- rbind(c(x, runtime(FUN, ...)))
を呼び出して、別の2つのレベルのために使用されていないと、最終的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
確かに、コメントであり、ダウン投票ではありません。あなたが書いたものに何も間違っていません。批判の意味ではありませんでした。 –