47 {
48 double *p, *p1, *p2;
49 long double xx;
50 int j, k, lag, ct;
51
52
53 for (k = 0, xx = 0, ct = 0, p = x; k < n; k++, p++) {
54 if (R_FINITE(*p)) {
55 xx += *p;
56 ct++;
57 }
58 }
59 if (ct < 1)
err(
"series 1 has no data");
60 xx /= ct;
61 for (k = 0, p = x; k < n; k++, p++) {
62 if (R_FINITE(*p)) *p -= xx;
63 }
64
65
66 for (k = 0, xx = 0, ct = 0, p = y; k < n; k++, p++) {
67 if (R_FINITE(*p)) {
68 xx += *p;
69 ct++;
70 }
71 }
72 if (ct < 1)
err(
"series 2 has no data");
73 xx /= ct;
74 for (k = 0, p = y; k < n; k++, p++) {
75 if (R_FINITE(*p)) *p -= xx;
76 }
77
78
79 for (j = 0, p = ccf; j < nlag; j++, p++) {
80 lag = lags[j];
81 if (lag < 0) {
82 for (k = 0, xx = 0, ct = 0, p1 = x-lag, p2 = y; k < n+lag; k++, p1++, p2++)
83 if (R_FINITE(*p1) && R_FINITE(*p1)) {
84 xx += (*p1)*(*p2);
85 ct++;
86 }
87 *p = (ct > 0) ? xx/ct : R_NaReal;
88 } else {
89 for (k = 0, xx = 0, ct = 0, p1 = x, p2 = y+lag; k < n-lag; k++, p1++, p2++)
90 if (R_FINITE(*p1) && R_FINITE(*p1)) {
91 xx += (*p1)*(*p2);
92 ct++;
93 }
94 *p = (ct > 0) ? xx/ct : R_NaReal;
95 }
96 }
97
98}