Pasar lista de funciones a `microbenchmark` para ser evaluadas
Aug 25 2020
Tengo un directorio de archivos llamado dir.
Me gustaría ejecutar una función llamada f(file, arg1, arg2)en cada uno de los archivos en dir.
Quiero comparar cada una de estas funciones entre sí en microbenchmark.
¿Cómo puedo crear una lista de funciones llamadas funcspara ser evaluadas que se vea así:
$a
f("file1", arg1, arg2)
$b
f("file2", arg1, arg2)
$c
f("file3", arg1, arg2)
¿Para que simplemente pueda llamar microbenchmark::microbenchmark(funcs)?
Respuestas
2 MrFlick Aug 25 2020 at 08:53
Debe crear una lista de expresiones no evaluadas. Una forma de hacerlo es con lapplyparámetros bquotepara construir esas expresiones. Entonces asegúrese de basar esa lista en el list=parámetro de microbenchmark(). Por ejemplo
tests <- lapply(paste0("file", 1:3), function(x) {
bquote(f(.(x), arg1, arg2))
})
microbenchmark(list=tests)
Aquí hay un ejemplo reproducible
tests <- lapply(c(1,10,100), function(x) {
bquote(rnorm(.(x)))
})
microbenchmark::microbenchmark(list=tests)
# Unit: microseconds
# expr min lq mean median uq max neval cld
# rnorm(1) 1.4 1.5 1.783 1.6 1.7 15.5 100 a
# rnorm(10) 1.9 2.1 2.253 2.2 2.3 4.0 100 b
# rnorm(100) 7.8 8.1 8.741 8.5 9.0 12.7 100 c