我想知道特定功能的公式是什么。通常当我键入没有括号的函数时,它会返回一个公式,所以如果我输入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>
哪个好。但是如果我在加载动物园包时键入rollmean
,则返回:
function (x, k, fill = if (na.pad) NA, na.pad = FALSE, align = c("center",
"left", "right"), ...)
{
UseMethod("rollmean")
}
<environment: namespace:zoo>
我猜测方法rollmean
正在发生一些事情,但我怎样才能看到那里发生了什么?这可能是一个新手问题,但我很难找到如何查看特定函数的基本公式。
答案 0 :(得分:4)
两个选项:
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")
2)直接寻找R源。因为它是一个包,所以很容易:找到包的.tar.gz版本,查找'R'目录,你会找到源代码(如果有的话,有开发者的评论)。对于动物园:http://cran.r-project.org/src/contrib/zoo_1.7-6.tar.gz
答案 1 :(得分:3)
rollmean.default
可以解决问题(如help(UseMethod)
中所述):
function (x, k, na.pad = FALSE, align = c("center", "left", "right"),
...)
{
x <- unclass(x)
n <- length(x)
y <- x[k:n] - x[c(1, 1:(n - k))]
y[1] <- sum(x[1:k])
rval <- cumsum(y)/k
if (na.pad) {
rval <- switch(match.arg(align), left = {
c(rval, rep(NA, k - 1))
}, center = {
c(rep(NA, floor((k - 1)/2)), rval, rep(NA, ceiling((k -
1)/2)))
}, right = {
c(rep(NA, k - 1), rval)
})
}
return(rval)
}
<environment: namespace:zoo>