[R] Optimizing C code

Christophe Genolini cgenolin at u-paris10.fr
Sat Jan 23 10:53:03 CET 2010


Duncan Murdoch a écrit :
> On 22/01/2010 12:52 PM, Christophe Genolini wrote:
>> Thanks both of you.
>>
>> >
>> > > Inf - Inf
>> > [1] NaN
>> So isn't the line 9 useless ? If either x[i] or y[i] are NA, then dev 
>> will be NA and !ISNAN(dev) will detect it...
>> Sothe loop cool be
>>
>> 8.    for(i = 0 ; i < taille ; i++) {
>> 10.        dev = (x[i] - y[i]);
>> 11.        if(!ISNAN(dev)) {
>> 12.          dist += dev * dev;
>> 13.          count++;
>> 15.      }
>> 16. }
>>
>> No ?
>>   
>
> That would presumably give the same answer, but there are lots of 
> reasons it might not be useless:
>
> - the author might find it clearer, or easier to generalize to integer 
> data (where your version wouldn't work).
> - it might be faster, because it can abort sooner.
> - it might be essentially equivalent in all important respects.
>
> Duncan Murdoch
>
That's 3 good reasons to keep the other code. Thanks.
>> Christophe
>> > Duncan Murdoch
>> >> Christophe
>> >>
>> >>
>> >> #define both_FINITE(a,b) (R_FINITE(a) && R_FINITE(b))
>> >> #define both_non_NA(a,b) (!ISNAN(a) && !ISNAN(b))
>> >>
>> >> 1. static double R_euclidean2(double *x, double *y, int taille)
>> >> 2. {
>> >> 3.    double dev, dist;
>> >> 4.    int count, i;
>> >> 5.
>> >> 6.    count= 0;
>> >> 7.    dist = 0;
>> >> 8.    for(i = 0 ; i < taille ; i++) {
>> >> 9.    if(both_non_NA(x[i], y[i])) {
>> >> 10.        dev = (x[i] - y[i]);
>> >> 11.        if(!ISNAN(dev)) {
>> >> 12.        dist += dev * dev;
>> >> 13.        count++;
>> >> 14.        }
>> >> 15.    }
>> >> 16.    }
>> >> 17.    if(count == 0)return NA_REAL;
>> >> 18.    if(count != taille) dist /= ((double)count/taille);
>> >> 19.    return sqrt(dist);
>> >> 20.}
>> >>
>> >> ______________________________________________
>> >> 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