Andy Barbour
Andy Barbour

Reputation: 8893

Profiling the function 'library' in R

I'm trying to track down the reason(s) why a package I've put together loads slowly (relative to others, it's noticeably slower), and running this (using ggplot2 as an example) doesn't appear to give any insight:

Rprof(line.profiling=TRUE)
library(ggplot2)
Rprof(NULL)
summaryRprof("Rprof.out", lines = "show")

which yields:

$by.self
              self.time self.pct total.time total.pct
<no location>       0.5      100        0.5       100
$by.total
              total.time total.pct self.time self.pct
<no location>        0.5       100       0.5      100
$by.line
              self.time self.pct total.time total.pct
<no location>       0.5      100        0.5       100

$sample.interval
[1] 0.02

$sampling.time
[1] 0.5

(And Rprof.out contains a mess of information I'm having trouble understanding.)

Can anyone suggest how I might "profile" what the function library is doing? Or, am I taking the wrong approach?

Upvotes: 3

Views: 139

Answers (1)

Joshua Ulrich
Joshua Ulrich

Reputation: 176698

As it says in the Line profiling section of ?summaryRprof:

If the code being run has source reference information retained (via keep.source = TRUE in source or KeepSource = TRUE in a package DESCRIPTION file or some other way), then information about the origin of lines is recorded during profiling.

By default, source code is not kept when building/installing packages. You'll see non-trivial timings if you just run summaryRprof(). You could always re-install the base package with KeepSource=TRUE, but that might be more trouble than it's worth.

Another alternative would be to use debugonce(library) to step through the library call line-by-line. This is a bit brute-force, but it might be more obvious than combing through the profiling output.

Upvotes: 3

Related Questions