Przekaż listę funkcji do oceny „microbenchmark”

Aug 25 2020

Mam katalog plików o nazwie dir.

Chciałbym uruchomić funkcję wywoływaną f(file, arg1, arg2)na każdym z plików w dir.

Chcę porównać każdą z tych funkcji w programie microbenchmark.

Jak mogę utworzyć listę funkcji wywoływanych funcsdo oceny, która wygląda następująco:

$a f("file1", arg1, arg2) $b
f("file2", arg1, arg2)

$c
f("file3", arg1, arg2)

Żebym mógł po prostu zadzwonić microbenchmark::microbenchmark(funcs)?

Odpowiedzi

2 MrFlick Aug 25 2020 at 08:53

Musisz utworzyć listę nieocenionych wyrażeń. Jednym ze sposobów jest lapplyużycie parametrów w bquotecelu zbudowania tych wyrażeń. Następnie pamiętaj, aby sflashować tę listę do list=parametru microbenchmark(). Na przykład

tests <- lapply(paste0("file", 1:3), function(x) {
  bquote(f(.(x), arg1, arg2))
})
microbenchmark(list=tests)

Oto powtarzalny przykład

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