[R] Optimizing C code
Christophe Genolini
cgenolin at u-paris10.fr
Fri Jan 22 11:14:18 CET 2010
Hi the list,
I need to write some efficient distances function, so I read the code
for the Euclidean distance.
I do not understand the purpose of the line 11 : if x[i] and y[i] are
not NA (line 9), can dev be NA ?
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.}
More information about the R-help
mailing list