Вывод выражения при вызове system.time - PullRequest
1 голос
/ 04 февраля 2011

Я написал функцию, которая создает список в качестве вывода, и я провожу эксперимент по измерению его производительности при запуске в нескольких конфигурациях.Вывод функции представляет собой вложенный список и является нетривиальным для каждой конфигурации.В настоящее время я подхожу к этой проблеме, используя lapply и список случайных начальных значений, которые будут предоставлены моей функции.Это успешно производит вывод функции для каждой конфигурации.Моя цель - расширить этот эксперимент, чтобы измерить время выполнения каждой конфигурации алгоритма.

В настоящее время я добавил в lapply анонимную функцию, которая возвращает вывод моей функции, а также время выполнения, где x - случайное начальное значение, как показано ниже:

function(x) {
    t1<-system.time(t2 <- foo(x))[3]
    return(c(t2,t1))
 }

Есть ли более краткий способ сохранить вывод оцененного выражения при использовании system.time?Спасибо

1 Ответ

3 голосов
/ 04 февраля 2011

Для таких экспериментов я бы порекомендовал, например, пакет microbenchmark среди других вместо вызовов system.time(), поскольку эти пакеты пытаются справиться с задачей с минимальными издержками и повышенной точностью (результаты в наносекундах).1004 *

Для этого потребуется написать некоторые функции, сохранить выходные данные этих функций в глобальной среде, а затем запустить эксперименты с конкурирующими функциями.

Небольшой пример:

foo <- function(x) assign(x, rnorm(1000), envir = .GlobalEnv)
boo <- function(x) assign(x, rbeta(1000, 0.1, 0.1), envir = .GlobalEnv)
res <- microbenchmark(foo("normal distr"), boo("beta distr"), times=100)

В этом примере НЕ будут сохранены ваши отдельные выходные данные, поскольку они будут перезаписаны во всех прогонах.Но вы могли бы написать внутренние функции, чтобы использовать заданные семена и добавить в список в глобальной среде, если вам это действительно нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...