我如何看待现有的课程

时间:2015-05-21 02:29:20

标签: r oop s4

我使用setClass函数定义了几个新类。但是这些课程并没有出现在我的Rstudio环境中。如何查看所有存在的类?

以下是一个例子:

setClass("geckoNss", representation(absolute = "character", item = "list"))

这个班级现在存在于某处,我们可以做到

> getClass("geckoNss")
Class "geckoNss" [in ".GlobalEnv"]

Slots:

Name:   absolute      item
Class: character      list

并制作该类的对象:

> new("geckoNss")
An object of class "geckoNss"
Slot "absolute":
character(0)

Slot "item":
list()

然而,我仍然没有在任何地方看到这个课程。 BondedDust的回答表明,如果将这些类分配给对象,则只能看到这些类。

那么甚至没有办法看到R附带的默认类吗?

1 个答案:

答案 0 :(得分:3)

http://stat.ethz.ch/R-manual/R-devel/library/methods/html/Classes.html

“定义类时,会存储一个包含有关该类信息的对象。该对象称为定义类的元数据,不存储在类的名称下(以允许程序员编写生成函数)该名称),但在一个特殊构造的名称下。要检查类定义,请调用getClass。元数据对象中的信息包括:“

setClass帮助页面中,它存储在创建它的环境中(默认情况下)或指定的“where”参数:

“创建一个类定义,指定表示(插槽)和/或此类中包含的类(超类),以及其他可选细节。作为副作用,类定义存储在指定的环境中。生成器函数作为setClass()的值返回,如果类不是虚拟的,则适合于从类创建对象。“

在控制台上运行setClass调用后,您将通过该名称在全局环境中获得一个对象:

> track <- setClass("track",
+          slots = c(x="numeric", y="numeric"))
> ls()
 [1] "A"             "AE_by_factors" "B"            
 [4] "dat"           "dd"            "df"           
 [7] "final"         "hl"            "len"          
[10] "lm0"           "ml"            "ml0"          
[13] "peas2"         "realdata"      "temp"         
[16] "tolerance"     "track"         "TravelMode"   
[19] "vbin"          "vint"          "vnum"         
> track
class generator function for class “track” from package ‘.GlobalEnv’
function (...) 
new("track", ...)

> class(track)
#----------
[1] "classGeneratorFunction"
attr(,"package")
[1] "methods"

您的问题最初是关于S4类的问题,即使用setClass创建的类。很明显您想要找到S3以及可能被称为默认或隐式类的内容。它们以不同的方式管理。如果要查看print函数的所有类,只需键入:

 methods(print) # I get 397 different methods at the moment. Each one implies an S3 class.
 # a variable number of values will appear depending on which packages ar loaded

另请阅读?methods的帮助页面。这些都是基于class属性发送的。对于隐式但未存储在对象integer中的“数字”,characterclass或“列表”等类,您只需要知道它们是内置于原始的S语言。 S3调度机制实际上是在时间的早期用螺栓固定在核心S机制上。当“新S语言”描述时,S3是该语言的一部分。我目前看到你仍然可以在亚马逊上获得二手副本:

New S Language Paperback – June 30, 1988
by R. A. Becker (Author), J. M. Chambers (Author), Allan R Wilks (Author)

还有其他功能可以让您查看搜索路径中可访问的功能:

> ?objects
> length(objects())
[1] 85

> length(apropos(what="", mode="function"))
[1] 3431

因此,在我的机器上,超过10%的可用功能是print方法。