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命令就非常有用,具体可以问问谷哥和度娘。
posted @ 2013-01-22 17:22  小Z&  阅读(1320)  评论(0编辑  收藏  举报