[R] For Loop performance

mcoyne at boninc.com mcoyne at boninc.com
Sun Jan 13 22:25:13 CET 2008


Hi Uwe,

Thank you so much for your help.  It works great with your
suggestion/help.  WOW, what a difference!
--MyC

>
>
> 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.
>>
>>
>




More information about the R-help mailing list