如何查看函数内函数的作用?

the*_*ist 2 r function

我想知道特定函数的公式是什么。通常,当我键入不带括号的函数时,它会返回一个公式,因此如果我键入,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,但是我如何才能看到其中发生了什么?这可能是一个新手问题,但我很难找出如何查看特定函数的基本公式。

mar*_*syl 5

两种选择:

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