我想知道特定函数的公式是什么。通常,当我键入不带括号的函数时,它会返回一个公式,因此如果我键入,sd我将得到:
function (x, na.rm = FALSE)
{
if (is.matrix(x))
apply(x, 2, sd, na.rm = na.rm)
else if (is.vector(x))
sqrt(var(x, na.rm = na.rm))
else if (is.data.frame(x))
sapply(x, sd, na.rm = na.rm)
else sqrt(var(as.vector(x), na.rm = na.rm))
}
<environment: namespace:stats>
Run Code Online (Sandbox Code Playgroud)
这很好。但是如果我在rollmean加载了动物园包的情况下输入它会返回:
function (x, k, fill = if (na.pad) NA, na.pad = FALSE, align = c("center",
"left", "right"), ...)
{
UseMethod("rollmean")
}
<environment: namespace:zoo>
Run Code Online (Sandbox Code Playgroud)
我猜测该方法中发生了一些事情rollmean,但是我如何才能看到其中发生了什么?这可能是一个新手问题,但我很难找出如何查看特定函数的基本公式。
两种选择:
1)使用方法机制,正如 Nick Sabbe 建议的那样。请注意,这是相当危险的,因为它很大程度上取决于类、泛型和方法的实现方式以及它所在的面向对象框架(S3、S4、R5)。
# List all methods, S3 here
print(methods(rollmean))
[1] rollmean.default rollmean.ts* rollmean.zoo*
Non-visible functions are asterisked
# Get each of them
getAnywhere("rollmean.default")
getAnywhere("rollmean.ts")
getAnywhere("rollmean.zoo")
Run Code Online (Sandbox Code Playgroud)
2)直接寻找R源。因为它是一个包,所以非常简单:找到该包的 .tar.gz 版本,查找“R”目录,您将找到源代码(带有开发人员的注释,如果有的话)。对于动物园:http ://cran.r-project.org/src/contrib/zoo_1.7-6.tar.gz