Как сделать сюжет из summaryRprof? - PullRequest
3 голосов
/ 15 января 2011

Это вопрос к поступлению в университет.

Мне дали три алгоритма для вычисления GCD, которые я уже сделал. Моя проблема заключается в получении результатов Rprof на графике, чтобы я мог сравнить их рядом.

Из того небольшого понимания, которое у меня есть о Rprof, summaryRprof и plot: Rprof используется следующим образом:

Rprof() #To start
#functions here
Rprof(NULL)  #TO end
summaryRprof() # to print results

Я понимаю, что в plot есть много разных типов входных данных, значений x и y и что-то, называемое фреймом данных, которое, как я полагаю, является причудливым словом для таблицы. и чтобы нарисовать разные линии и вещи мне нужно использовать это: http://www.harding.edu/fmccown/r/

Не могу понять, как получить результаты summaryRprof для функции plot ().

> Rprof(filename="RProfOut2.out", interval=0.0001)
> gcdBruteForce(10000, 33)
[1] 1
> gcdEuclid(10000, 33)
[1] 1
> gcdPrimeFact(10000, 33)
[1] 1
> Rprof(NULL)
> summaryRprof()
?????plot????

Я читал о переполнении стека, что и на других сайтах, которые я также могу попробовать использовать profr и proftools, хотя я не совсем уверен в их использовании.

Единственный график, который мне удалось сделать, - это график, использующий plot (system.time (gcdFunction (10,100))) *

Как всегда, любая помощь приветствуется.

Ответы [ 2 ]

6 голосов
/ 15 января 2011

Есть два пакета, которые визуализируют вывод Rprof:

В системе Unix / OS X с установленным graphviz вы можете использовать красивый Perl-скрипт от Romain Francois, который находится на странице R Wiki по профилированию .

Все это описано с примерами в моем Intro to HPC с учебными пособиями R , которые вы можете найти, например. здесь .

3 голосов
/ 15 января 2011

Функции gcd должны быть чем-то, что вы кодировали отдельно, поскольку они не являются частью базы R. Вот надуманный пример, чтобы показать вам, как преобразовать данные в пригодный для использования формат для дальнейшей обработки и построения графиков.*

Во-первых, вам нужно передать summaryRprof() имя файла для обработки.В вашем примере это будет summaryRprof("RProfOut2.out").

. Это вернет сводную статистику для вашего предыдущего кода.Поскольку нам необходимо выполнить дальнейшую обработку этой статистики, давайте присвоим ее новому объекту:

sumStats <- summaryRprof("RProfOut2.out")

Возвращает объект списка с 4 элементами:

> str(sumStats)
List of 4
 $ by.self        :'data.frame':    2 obs. of  4 variables:
  ..$ self.time : num [1:2] 1.97 0.25
  ..$ self.pct  : num [1:2] 88.7 11.3
  ..$ total.time: num [1:2] 1.97 0.25
  ..$ total.pct : num [1:2] 88.7 11.3
 $ by.total       :'data.frame':    3 obs. of  4 variables:
  ..$ total.time: num [1:3] 1.97 0.25 0
  ..$ total.pct : num [1:3] 88.7 11.3 0
  ..$ self.time : num [1:3] 1.97 0.25 0
  ..$ self.pct  : num [1:3] 88.7 11.3 0
 $ sample.interval: num 1e-04
 $ sampling.time  : num 2.22

На данный момент, я предполагаю, что вас заинтересует один из первых двух фреймов данных.Я предпочитаю графику в ggplot2 базовой графике, но вы, конечно, можете добиться большинства вещей с базовой графикой ... У меня просто больше опыта с ggplot2.Вот один из подходов к построению данных для сгенерированного by.self() фрейма данных:

require(ggplot2)

byself <- sumStats$by.self

byself$functions <- rownames(byself)

m <- melt(byself, id.var = "functions")

qplot(functions, value, data = m, fill = variable, geom = "bar", position = "dodge")

. Таким образом, график выглядит так:это придуманный код, который я составил для примера.Я знаю, не очень креативно, но выполняет свою работу:

Rprof("Rprof.out", interval = 0.0001)
x <- rnorm(10000000)
y <- x ^ 2
Rprof(NULL)
sumStats <- summaryRprof("Rprof.out")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...