How do I see existing classes

微笑、不失礼 提交于 2019-12-11 03:32:19

问题


I have used the setClass function to define several new classes. But these classes don't appear in my Rstudio environment. How do I see all the classes that exist?

Here is an example:

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

The class now exists somewhere, as we can do

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

Slots:

Name:   absolute      item
Class: character      list

and make objects of that class:

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

Slot "item":
list()

Yet, I still do not see the class anywhere. BondedDust's answer suggests that you can only see these classes if you assign them to an object.

So is there no way to even see the default classes R comes with?


回答1:


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

"When a class is defined, an object is stored that contains the information about that class. The object, known as the metadata defining the class, is not stored under the name of the class (to allow programmers to write generating functions of that name), but under a specially constructed name. To examine the class definition, call getClass. The information in the metadata object includes: "

From the setClass help page, it's stored in the environment where it is created (by default) or in the specified with the "where" argument:

"Create a class definition, specifying the representation (the slots) and/or the classes contained in this one (the superclasses), plus other optional details. As a side effect, the class definition is stored in the specified environment. A generator function is returned as the value of setClass(), suitable for creating objects from the class if the class is not virtual."

After running a setClass call at the console you get an object in the global environment by that name:

> 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"

Your question originally asked about S4 classes, i.e. the ones created with setClass.. It wasn't at all clear that you wanted to find S3 and what might be called default or implicit classes. They are managed in a different manner. If you want to see all the classes that exist for the print function, just type:

 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

Also read the help page for ?methods. Those are each dispatched on the basis of the class attribute. For classes, such as 'numeric', integer, character or 'list' that are implicit but not stored in object class-attributes youyou simply need to know that they were built into the original S language. The S3 dispatch mechanism was actually bolted on to that core S mechanism back in the dawn of time. S3 was part of the language when it was described by "New S Language". I currently see that you can still get used copies at Amazon:

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

There are other functions that allow you to look at the functions accessible along the search path:

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

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

So on my machine a bit more than 10% of the available functions are print methods.



来源:https://stackoverflow.com/questions/30363558/how-do-i-see-existing-classes

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!