Did not see a simple way to make it faster. However, this is a piece of code which can be made to run much faster in C. See below.

I don't know if you are familiar with running c-code from R. If not, the official documentation is in the R Extensions manual. However, this is not the most easy documentation for a first read. If you want to use the c-code and have problems getting it running, let me/us know your operating system and I/we will try to walk you through it.

HTH,
Jan


=== c-code ===
void foo(double* m, int* pn, int* r) {
  int n = *pn;
  double* pm1 = m;
  double* pm2 = m + n;
  int* pr = r;
  for (int i = 0; i < n; ++i, ++pm1, ++pm2, ++pr) {
    *pr = 1;
    double* qm1 = m;
    double* qm2 = m + n;
    for (int j = 0; j < n; ++j, ++qm1, ++qm2) {
      if ((*qm1 > *pm1) && (*qm2 > *pm2)) {
        *pr = 0;
        break;
      }
    }
  }
}

=== r-code ===
dyn.load("rtest.so")

foo <- function(m) {
  n <- dim(m)[1]
  .C("foo",
      as.double(m),
      as.integer(n),
      r = logical(n))$r
}

x <- runif(32000)
y <- runif(32000)
xy <- cbind(x,y)

t1 <- system.time({
    outer <- function(z){
        !any(x > z[1] & y > z[2])
    }
    j <- apply(xy,1, outer)
})

t2 <- system.time({
    j2 <- foo(xy)
})

=== results ===
> all(j == j2)
[1] TRUE
> t1
   user  system elapsed
 35.462   0.028  35.549
> t2
   user  system elapsed
  0.008   0.000   0.008
>




On 10/10/2012 12:15 PM, tonja.krue...@web.de wrote:
Hi all,

I wrote a function that actually does what I want it to do, but it tends to be 
very slow for large amount of data. On my computer it takes 5.37 seconds for 
16000 data points and 21.95 seconds for 32000 data points. As my real data 
consists of 18000000 data points it would take ages to use the function as it 
is now.
Could someone help me to speed up the calculation?

Thank you, Tonja

system.time({
x <- runif(32000)
y <- runif(32000)

xy <- cbind(x,y)

outer <- function(z){
!any(x > z[1] & y > z[2])}
j <- apply(xy,1, outer)

plot(x,y)
points(x[j],y[j],col="green")

})

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to