R中查看函数源代码
最近做一个项目,需要优化一下原来的算法,其中涉及到R,于是开始纠结R函数源代码。
现在把查看R函数源代码的基本方法总结一下:
1、简单的函数(非类函数),直接在R里面输入函数名就可以查看源代码,例如:
> replace
function (x, list, values)
{
x[list] <- values
x
}
2、对于类函数,直接输入函数名不能显示出源代码,例如:
> summary
function (object, ...)
UseMethod("summary")
这时候需要用到methods()函数,用法methods(FunctionName)如下:
> methods(summary)
[1] summary.aov summary.aovlist summary.aspell*
[4] summary.connection summary.data.frame summary.Date
[7] summary.default summary.ecdf* summary.factor
[10] summary.glm summary.infl summary.lm
[13] summary.loess* summary.manova summary.matrix
[16] summary.mlm summary.nls* summary.packageStatus*
[19] summary.PDF_Dictionary* summary.PDF_Stream* summary.POSIXct
[22] summary.POSIXlt summary.ppr* summary.prcomp*
[25] summary.princomp* summary.srcfile summary.srcref
[28] summary.stepfun summary.stl* summary.table
[31] summary.tukeysmooth*
Non-visible functions are asterisked
找到这个类函数里面你所关注的函数,输入函数名,回车,就可以查看代码了,如:
> summary.aovlist
function (object, ...)
{
if (!is.null(attr(object, "weights")))
cat("Note: The results below are on the weighted scale\n")
dots <- list(...)
strata <- names(object)
if (strata[1L] == "(Intercept)") {
strata <- strata[-1L]
object <- object[-1L]
}
x <- vector(length = length(strata), mode = "list")
names(x) <- paste("Error:", strata)
for (i in seq_along(strata)) x[[i]] <- do.call("summary",
c(list(object = object[[i]]), dots))
class(x) <- "summary.aovlist"
x
}
对于非类函数使用methods会报出错误:
> methods("sample")
[1] sample.int
Warning message:
In methods("sample") : function 'sample' appears not to be generic
对于具体的函数,要搞懂它,可能看这些信息还不够,需要下载*.tar.gz,查看里面的源代码。这时候linux下的find命令就非常有用,具体可以问问谷哥和度娘。