acf 函数的 R 源文件

sdg*_*238 4 c r

所述acfR中的统计库函数包括线

.Call(C_acf, x, lag.max, type == "correlation")
Run Code Online (Sandbox Code Playgroud)

但我C_acf在我的机器上的任何地方都找不到该文件(也不在https://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

如何查看 R .Internal 或 .Primitive 函数的源代码?

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

Sat*_*ish 5

此方法将有助于识别具有CallRoutine或类的已编译函数的源代码NativeSymbolInfo

查找调用例程的命名空间

getAnywhere(C_acf)
# namespace:stats
Run Code Online (Sandbox Code Playgroud)

下载您的基础 R 版本,因为 stats 是基础 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 = "./")
Run Code Online (Sandbox Code Playgroud)

处理目录路径

old_dir <- getwd()
setwd("./R-3.0.0/src/library/stats/src/")
Run Code Online (Sandbox Code Playgroud)

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));"  
Run Code Online (Sandbox Code Playgroud)

重置旧目录路径

setwd(old_dir)
Run Code Online (Sandbox Code Playgroud)

参考: