For Loop performance
mcoyne at boninc.com wrote:
WRT: Say length(V1) is n, do you want to compare
v1[1] with v2[1] and v2[2] and v1[2] with v2[3] and v2[4] or v1[1] with v2[1] and v2[n+1] and v1[2] with v2[2] and v2[n+2]
v1[1] with (v2[1] and v2[2]) v1[2] with (v2[3] and v2[4]) v1[3] with (v2[5] and v2[6]) .... ... v1[n] with (v2[n+1] and v2[n+2])
So you end up with all comparisons by:
v2m <- matrix(v2, ncol=2, byrow=TRUE)
logical_result <- (v1 == v2m[,1]) & (v1 == v2m[,2])
Now you can (1) apply vectorized statements (e.g. using ifelse()) OR (if
1 is impossible) (2):
for (I in which(logical_result)) {
statement_1
statement_2
}
Uwe Ligges
I hope this is clear (I think I was wrong in the snippet of code earlier). Thanks in advance. --MyC
My Coyne wrote:
Hello, Newbie question and hope you can help . I have two vector V1 and V2, where length(V2) = length of (V1) * 2; length(V1) ~ 16,000. For each member in V1, I need to compare 2 element of V2 for equality
If just the comparison is concerned, you can do it in vectorized form, but I am not sure of you want to comapre v1[i] with v2[i] and v2[i+1], otherwise it would not make sense that length(V2) = length of (V1) * 2 ... Say length(V1) is n, do you want to compare v1[1] with v2[1] and v2[2] and v1[2] with v2[3] and v2[4] or v1[1] with v2[1] and v2[n+1] and v1[2] with v2[2] and v2[n+2] ??? Uwe Ligges
i.e.
for (I in 1:length (V1)) {
if ( v2[i] == v1[i] & v2[i+1]==v1[i] ){
statement_1
statement_2
.
}
}
This for-loop is too slow (it takes a good 5 minutes on my Windows
machine)
to finish processing the vector V1 of 16,000; I will need to process a
lot
more than 16,000 (about 300*16,000).
Is there a better way to do looping with R? Any help is greatly
appreciate
--MyC.
[[alternative HTML version deleted]]
______________________________________________ R-help at 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.