如何在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.prcomp是不能看到源代码的。

找到这个类函数里面你所关注的函数,输入函数名,回车,就可以查看代码了,如:

> 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命令就非常有用,具体可以问问谷哥和度娘。

 

3. The getAnywhere function is helpful when you don't know in which namespace is a function.

首先,一个扩展包中定义的函数有区分公开和不公开的,会在扩展包根目录下的NAMESPACE文件中定义是否Export,如果一个函数没有Export,则为不公开的函数,只能在包内部调用。

lattice::qq是一个Generic Function,就像是plot,summary等函数,是由对象的class来确定实际执行的函数(例如对于data frame,执行summary时会执行summary.data.frame,对于lm会执行summary.lm等等,都不是则会执行summary.default)这是R S3 面向对象系统的设计。因此看到qq源代码时只能看到 UseMethod("qq"),还要看到哪些class实现了qq方法,而lattice并没有把这些实现给Export

 

4. 直接上CRAN 下载源代码包。对于加星号标注的是不可见的方法

流程如下:

1)       登入R主页 http://www.r-project.org/ ,点击 Download 下的CRAN

2)       选择一个镜像

3)       里面的Source Code for all Platforms就可以下载各种源码了,下面以下载程序包源码包为例,点packages

4)       选择sorted的方式,推荐by name

5)       找到你感兴趣的包,比如abind,点进去就可以看见Package source这一项,用tar.gz封装的,download就可以了,解压后就能看见源码了。

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值