我在哪里可以找到ARMAtoMA()的代码

时间:2016-07-21 05:28:13

标签: r

如何找到函数ARMAtoMA内发生的事情?我得到了以下结果。

ARMAtoMA
#function (ar = numeric(), ma = numeric(), lag.max) 
#.Call(C_ARMAtoMA, as.double(ar), as.double(ma), as.integer(lag.max))
#<bytecode: 0x000000001a5f5700>
#<environment: namespace:stats>

1 个答案:

答案 0 :(得分:1)

你可以在R的源文件中找到它:

R-<version>/src/library/stats/src/pacf.c
  • 我们在R-<version>/src/library/stats/内找到,因为它来自stats package;
  • 我们在R-<version>/src/library/stats/src中找到,因为它是C代码;
  • 最后,.c下有多个R-<version>/src/library/stats/src个文件。如果您在这些文件中搜索“ARMAtoMA”,则可以找到pacf.c

我在这里为你复制一份:

SEXP ARMAtoMA(SEXP ar, SEXP ma, SEXP lag_max)
  {
    int i, j, p = LENGTH(ar), q = LENGTH(ma), m = asInteger(lag_max);
    double *phi = REAL(ar), *theta = REAL(ma), *psi, tmp;
    SEXP res;

    if(m <= 0 || m == NA_INTEGER)
    error(_("invalid value of lag.max"));
    PROTECT(res = allocVector(REALSXP, m));
    psi = REAL(res);
    for(i = 0; i < m; i++) {
    tmp = (i < q) ? theta[i] : 0.0;
    for(j = 0; j < min(i+1, p); j++)
        tmp += phi[j] * ((i-j-1 >= 0) ? psi[i-j-1] : 1.0);
    psi[i] = tmp;
    }
    UNPROTECT(1);
    return res;
}