显示R中包中函数的源代码

时间:2012-10-01 19:42:59

标签: r s4

  

可能重复:
  R: show source code of an S4 function in a package

我下载了一个包(GEOquery)并正在玩一些功能。其中一个名为Table,根据我的理解,它可以将S4数据集制成表格。

E.g。

> summary(GDS2853) # GDS2853 is a dataset I downloaded from NCBI 
Length  Class   Mode 
     1    GDS     S4 

getAnywhere(Table)显示

> getAnywhere(Table)
A single object matching ‘Table’ was found
It was found in the following places
  package:GEOquery
  namespace:GEOquery
with value

function (object) 
standardGeneric("Table")
<environment: 0x06ad5268>
attr(,"generic")
[1] "Table"
attr(,"generic")attr(,"package")
[1] "GEOquery"
attr(,"package")
[1] "GEOquery"
attr(,"group")
list()
attr(,"valueClass")
character(0)
attr(,"signature")
[1] "object"
attr(,"default")
`\001NULL\001`
attr(,"skeleton")
function (object) 
stop("invalid call in method dispatch to \"Table\" (no default method)", 
    domain = NA)(object)
attr(,"class")
[1] "standardGeneric"
attr(,"class")attr(,"package")
[1] "methods"

我想了解Table的代码,以便了解如何制作GDS数据集,因为data.frameas.list无法强制{{1} } class - 虽然我可以通过例如

制表GDS数据集
S4

我按照其他帖子的建议尝试了GDS_table=Table(GDS2853)[1:20000,1:20] #GDS2853 contains 20 columns and approx 17000 rows ,但下面是我得到的

getMethods

我还尝试通过放入> getMethod("Table") Error in getMethod("Table") : No method found for function "Table" and signature 来指定“where”,但显然package=:GEOquery是未使用的参数。

不知道我做错了什么,以便无法查看package的源代码。

2 个答案:

答案 0 :(得分:8)

从您发布的输出中,看起来Table是S4泛型。

要查看其S4方法的列表,请使用showMethods()。要查看特定方法,请使用getMethod(),传入所需方法的“签名”以及函数名称。 ('签名'是由参数的类组成的字符向量,通用Table执行其方法调度。即,如果您将执行Table(GDS2853),签名可能是class(GDS2835)

以下是获取 sp 包中S4方法代码的示例:

library(sp)

showMethods("overlay")
# Function: overlay (package sp)
# x="SpatialGrid", y="SpatialPoints"
# x="SpatialGrid", y="SpatialPolygons"
# x="SpatialGridDataFrame", y="SpatialPoints"
# x="SpatialGridDataFrame", y="SpatialPolygons"
# x="SpatialPixels", y="SpatialPoints"
# x="SpatialPixelsDataFrame", y="SpatialPoints"
# x="SpatialPoints", y="SpatialPolygons"
# x="SpatialPointsDataFrame", y="SpatialPolygons"
# x="SpatialPolygons", y="SpatialGrid"
# x="SpatialPolygons", y="SpatialPoints"

getMethod("overlay", signature=c("SpatialGrid", "SpatialPoints"))

答案 1 :(得分:3)

在您的示例中,它将是:

getMethod("Table", "GEOData")

您可能还对如何获取S4方法的帮助文档感兴趣,这些方法需要同样不寻常的调用:

method?Table("GEOData")

通常,使用S4,您需要

  • 功能名称
  • 用于
  • 的对象的类(签名)

如果你对后者感到茫然:

class(object)

将返回该课程,您也可以这样做:

showMethods("Table")

显示所有当前可用的方法。或者,我发现我经常使用:

findMethods("Table")

原因是findMethods返回特定函数的所有方法的列表。类可以有很长的名字,我发现我经常错误/错误地将它们误解为快速黑客,findMethods("functionname")很方便。当然,由于打印列表可能很长,它也可能会让您厌倦了许多方法的泛型函数。