Hello,

Anyway, I've redid part of the function in order to accomodate 1. larger increments and 2. keep if equal or not. So, here's the complete version and forget my two previous mails.

to.keep <- function(x, increment = 1e4, keep.if.equal = FALSE){
    keep <- function(i, env){
        env$ires <- env$ires + 1
        if(env$ires > env$curr.rows){
env$result <- rbind(env$result, matrix(nrow=increment, ncol=nc))
            env$curr.rows <- env$curr.rows + increment
        }
        env$result[env$ires, ] <- x[i, ]
    }

    x  <- as.matrix(x)
    a1 <- x[, 1]
    a2 <- x[, 2]
    a3 <- x[, 3]
    a4 <- x[, 4]
    nc <- ncol(x)

    e <- new.env()
    e$curr.rows <- increment
    e$result <- matrix(nrow=e$curr.rows, ncol=nc)
    e$ires <- 0
    if(keep.if.equal){
        for(i in seq_len(nrow(x))){
            yes <- a1[i] >= a1 | a2[i] >= a2 | a3[i] <= a3 | a4[i] >= a4
            if(all(yes[-i])) keep(i, e)
        }
    }else{
        for(i in seq_len(nrow(x))){
            no <- a1[i] <= a1 & a2[i] <= a2 & a3[i] >= a3 & a4[i] <= a4
            if(!any(no[-i])) keep(i, e)
        }
    }
    e$result[seq_len(e$ires), 1:nc]
}


I hope this finally settles it.

Rui Barradas

Em 23-07-2012 18:18, Reith, William [USA] escreveu:
It looks like both ways produce the same result.

-----Original Message-----
From: Rui Barradas [mailto:ruipbarra...@sapo.pt]
Sent: Monday, July 23, 2012 1:05 PM
To: Reith, William [USA]
Subject: Re: [External] Re: [R] Speeding up a loop

Hello,

But that's the negation of '<', so try to negate '<=', meaning, remove the 
equal signs. Sorry if I wasn't very clear.

Rui Barradas

Em 23-07-2012 17:44, Reith, William [USA] escreveu:
This is what I have for the yes for loop

for(i in seq_len(nrow(x))){
      yes <- x[i, 1] >= a1 | x[i, 2] >= a2 | x[i, 3] <= a3 | x[i, 4]>= a4
      if(all(yes)) keep(i, e)
    }

-----Original Message-----
From: Rui Barradas [mailto:ruipbarra...@sapo.pt]
Sent: Monday, July 23, 2012 12:14 PM
To: Reith, William [USA]
Cc: r-help
Subject: [External] Re: [R] Speeding up a loop

Hello,

I think this is a boundary issue. In your op you've said "less" not "less than or 
equal to".
Try using "<=" and ">=" to see what happens, I bet it solves it.

Rui Barradas

Em 23-07-2012 14:43, wwreith escreveu:
1.15           60       0.553555415         0.574892872
1.15       60   0.563183983         0.564029359

Shouldn't the function row out the second one, since it it higher in
position 3 and lower in position 4 i.e. it should not all be yes?





--
View this message in context:
http://r.789695.n4.nabble.com/Speeding-up-a-loop-tp4637201p4637438.ht
m l Sent from the R help mailing list archive at Nabble.com.

______________________________________________
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