我使用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附带的默认类吗?
答案 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
中的“数字”,character
,class
或“列表”等类,您只需要知道它们是内置于原始的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
方法。