4

可能重复:
R:显示包中 S4 函数的源代码

我下载了一个包 ( GEOquery) 并正在使用其中的一些功能。其中一个叫做Table,据我了解,它能够将S4数据集制成表格。

例如

> 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.frame并且as.list不能强制S4上课 - 尽管我可以通过例如,将 GDS 数据集制成表格,

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

我还尝试通过输入来指定“位置”,package=:GEOquery但显然package是一个未使用的参数。

想知道我做错了什么,以至于看不到Table.

4

2 回答 2

8

从您发布的输出来看,它看起来像是TableS4 通用的。

要查看其 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"))
于 2012-10-01T20:10:35.210 回答
3

在您的示例中,它将是:

getMethod("Table", "GEOData")

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

method?Table("GEOData")

通常,使用 S4,您将需要

  • 函数名
  • 它所针对的对象的类(签名)

如果您对后者感到迷茫:

class(object)

将返回课程,您还可以执行以下操作:

showMethods("Table")

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

findMethods("Table")

原因是findMethods返回特定函数的所有方法的列表。类可以有很长的名称,我发现我经常输入错误/大写错误,因此作为快速破解,findMethods("functionname")很方便。当然,由于打印的列表可能很长,因此它也可以让您使用许多方法的通用函数。

于 2012-10-02T01:46:54.363 回答