Other Ways to Speed Up R
Sometimes you can cheat a little bit: you can make R run faster without tuning your code. This section shows two ways to do that.
The R Byte Code Compiler
Normally, R is an interpreted language.
But beginning in R 2.13.0, R has included a byte code compiler to speed up computations. As an example, let’s consider the vector of squares function that we used above:
> naive.vector.of.squares function(n) { v <- 1:n for (i in 1:n) v[i] <- v[i]^2 } > system.time(naive.vector.of.squares(1000000)) user system elapsed 3.025 0.016 3.036
Now we’ll use the cmpfun
function to create a compiled version of this function
and then test its performance.
> library(compiler) > compiled.naive.vector.of.squares <- cmpfun(naive.vector.of.squares) > system.time(compiled.naive.vector.of.squares(1000000)) user system elapsed 0.637 0.005 0.636
As you can see, the compiled version of this function runs much faster. Of course, it still runs more slowly than the vector operation:
> system.time(better.vector.of.squares(1000000))
user system elapsed
0.008 0.000 0.008
And compiling the vector operation does not make a huge difference:
> better.vector.of.squares.compiled <- cmpfun(better.vector.of.squares) > system.time(better.vector.of.squares.compiled(1000000)) user system elapsed 0.007 0.000 0.007
But that doesn’t mean you shouldn’t try the compiler for your problem. It’s one of the simplest tricks for speeding up your code. (It’s even easier than ordering a new, faster server. And it’s cheaper.) ...
Get R in a Nutshell, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.