Equivalent of inc(x) or x++ in R

Let try different solutions to mimic C operand ++ to have the most efficient.





n <- as.integer(1)
system.time(for (i in 1:100000) n <- n + 1)

n <- as.numeric(1)
system.time(for (i in 1:100000) n <- n + 1)

n <- as.double(1)
system.time(for (i in 1:100000) n <- n + 1)

No change:
utilisateur     système      écoulé 
      0.035       0.000       0.036 

Not let do a function inc():

inc <- function(x) eval.parent(substitute(x <- x + 1))

n <- as.integer(1)
system.time(for (i in 1:100000) inc(n))

It is ten times slower:
utilisateur     système      écoulé 
      0.470       0.005       0.477 

Using the Hmisc package:
require(Hmisc)
n <- as.integer(1)
system.time(for (i in 1:100000) inc(n) <- 1 )

It is only 3 times slower:
utilisateur     système      écoulé 
      0.150       0.001       0.151 

And using a C function:
In file inc.c:
#include <R.h>
void inc(int *x)
{
    x[0]++;
}

Enter these in R console:
system('R CMD SHLIB inc.c')
dyn.load("inc.so")

n <- as.integer(1)
system.time(for (i in 1:100000) n <- .C("inc", n=n)$n)

The result is the worst of all the tries !
utilisateur     système      écoulé 
     31.783       3.996      36.163 

In conclusion n <- n + 1 is still the best !

Commentaires

Posts les plus consultés de ce blog

Standard error from Hessian Matrix... what can be done when problem occurs

stepAIC from package MASS with AICc

Install treemix in ubuntu 20.04