आर पैकेज के लिए लिखित सी कोड पढ़ना। रैंडिन, यूएनआईएफ, ईपीएस, आदि के लिए परिभाषा कहां खोजें?

मुझे आर पैकेज के लिए सी कोड को समझने में दिलचस्पी है। लेकिन मैं कोड में आया हूं जैसे कि RANDIN , RANDOUT , UNIF , EPS आदि (क्या वे मैक्रोज़ हैं?) जिसके लिए मुझे नहीं पता कि कार्यान्वयन/परिभाषा कहां मिलें।

इन पूंजीकृत 'अभिव्यक्तियों' के लिए मुझे कोड (और स्पष्टीकरण यदि कोई हो) कहां मिल सकता है?

एक उदाहरण 'क्लास' आर पैकेज के अंदर VR_onlineSOM फ़ंक्शन है। इस फ़ंक्शन में निम्न कोड सी में लिखा गया है:

void
VR_onlineSOM(double *data, double *codes, double *nhbrdist,
         double *alpha, double *radii,
         Sint *pn, Sint *pp, Sint *pncodes, Sint *rlen)
{
    int n = *pn, p = *pp, ncodes = *pncodes;
    int i, j, k, nearest = 0 /* -Wall */, nind;
    double dm, dist, tmp;
    unsigned int cd; /* avoid spurious warning from gcc pre-4.3.0 */

    RANDIN;
    for (k = 0; k < *rlen; k++) {
    /* pick a random data point */
    i = (int)(n * UNIF);
    /* find the nearest code 'near' */
    nind = 0; dm = DOUBLE_XMAX;
    for (cd = 0; cd < ncodes; cd++) {
        dist = 0.0;
        for (j = 0; j < p; j++) {
        tmp = data[i + j*n] - codes[cd + j*ncodes];
        dist += tmp * tmp;
        }
        if (dist <= dm * (1 + EPS)) {
        if (dist < dm * (1 - EPS)) {
            nind = 0;
            nearest = cd;
        } else {
            if(++nind * UNIF < 1.0) nearest = cd;
        }
        dm = dist;
        }
        /* update all codes within radii[k] of 'nearest' */
        for (cd = 0; cd < ncodes; cd++) {
        if(nhbrdist[cd + ncodes*nearest] > radii[k]) continue;
        for(j = 0; j < p; j++)
            codes[cd + j*ncodes] += alpha[k] *
            (data[i + j*n] - codes[cd + j*ncodes]);
        }
    }
    }
    RANDOUT;
}
1

1 उत्तर

हां वे कुछ मैक्रोज़ और निरंतर हैं जिन्हें class.c की शुरुआत में परिभाषित किया गया है।

#define EPS 1e-4            /* relative test of equality of distances */
#define RANDIN  GetRNGstate()
#define RANDOUT PutRNGstate()
#define UNIF unif_rand()
3
जोड़ा