用于acf功能的R源文件

时间:2018-02-07 21:19:35

标签: c r

R的统计资料库中的acf函数包含

.Call(C_acf, x, lag.max, type == "correlation")

但我在我的机器上找不到文件C_acfhttps://github.com/SurajGupta/r-sourcehttps://github.com/wch/r-source}。

在这些问题上应用建议没有帮助:

https://stats.stackexchange.com/questions/254227/manual-calculation-of-acf-of-a-time-series-in-r-close-but-not-quite

How to see the source code of R .Internal or .Primitive function?

该文件似乎不是人们所说的任何地方。我怎样才能找到C_acf?

1 个答案:

答案 0 :(得分:3)

此方法将帮助识别已编译函数的源代码,该函数具有CallRoutineNativeSymbolInfo类。

找到调用例程的命名空间

getAnywhere(C_acf)
# namespace:stats

下载您的基本R版本,因为统计数据是基础R的一部分。

download.file(url = "https://cran.r-project.org/src/base/R-3/R-3.0.0.tar.gz", destfile = "./R-3.0.0.tar.gz")
untar(tarfile = "./R-3.0.0.tar.gz", exdir = "./")

处理目录路径

old_dir <- getwd()
setwd("./R-3.0.0/src/library/stats/src/")

在源文件中找到单词acf。您必须浏览结果列表并确定确切的功能。最简单的方法是查看函数名称及其参数。

myresults <- sapply( list.files("./"), function(x) grep("acf", readLines(x), value = TRUE))
myresults <- myresults[lengths(myresults) != 0]
myresults[2] 
# $filter.c
# [1] "acf0(double *x, int n, int ns, int nl, int correlation, double *acf)"
# [2] "\t\tacf[lag + d1*u + d2*v] = (nu > 0) ? sum/(nu + lag) : NA_REAL;"     
# [3] "\t    se[u] = sqrt(acf[0 + d1*u + d2*u]);"                            
# [4] "\t\tacf[0 + d1*u + d2*u] = 1.0;"                                       
# [5] "\t\t\tacf[lag + d1*u + d2*v] /= se[u]*se[v];"                           
# [6] "SEXP acf(SEXP x, SEXP lmax, SEXP sCor)"                              
# [7] "    acf0(REAL(x), nx, ns, lagmax, cor, REAL(ans));"  

重置旧目录路径

setwd(old_dir)

<强>参考: