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.