查看R中的函数代码

要了解一个函数的运行过程,一是查看帮助文档,二是查看其代码

普通函数

对于普通函数,查看其源代码是简单的事情,如data.frame函数

# 直接打印代码
> data.frame
# 查看并编辑代码,注意编辑后只在当前session生效。
> edit(data.frame)

泛型函数

对于泛型函数,上述方法通常不能起作用

S3方法

> head
function (x, ...) 
UseMethod("head")


# UseMethod通常表明该函数是S3的方法。

S4方法

> dotplot
standardGeneric for "dotplot" defined from package "enrichplot"

function (object, ...) 
standardGeneric("dotplot")


Methods may be defined for arguments: object
Use  showMethods(dotplot)  for currently available ones.
#standardGeneric通常表明该函数是S4的方法。

对于S3泛型函数

列出S3泛型函数的所有方法

# methods函数可以列出S3泛型函数的所有方法
> methods(head)
[1] head.array*      head.data.frame* head.default*    head.ftable*     head.function*  
[6] head.matrix     
see '?methods' for accessing help and source code

然后获得代码
带*的函数,表明其是隐藏的

# 获得matrix类的head方法的代码
> head.matrix
> edit(head.matrix)

# 对于带*的隐藏函数,可使用如下办法
> getAnywhere(head.array)
A single object matching ‘head.array’ was found
It was found in the following places
  registered S3 method for head from namespace utils
  namespace:utils
with value

function (x, n = 6L, ...) 
{
    checkHT(n, d <- dim(x))
    args <- rep(alist(x, , drop = FALSE), c(1L, length(d), 1L))
    ii <- which(!is.na(n[seq_along(d)]))
    args[1L + ii] <- lapply(ii, function(i) seq_len(if ((ni <- n[i]) < 
        0L) max(d[i] + ni, 0L) else min(ni, d[i])))
    do.call("[", args)
}


# 或者
> utils:::head.array

对于S4泛型函数

首先列出使用该方法的参数对象类型

> showMethods(dotplot) 
Function: dotplot (package enrichplot)
object="compareClusterResult"
object="enrichResult"
object="gseaResult"

然后根据参数对象的类型查看代码

# 如获取enrichResult的dotplot方法
>getMethod(dotplot, "enrichResult")

你可能感兴趣的:(查看R中的函数代码)