Как я вижу существующие классы

Я использовал 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 ответ

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 еще на заре времени. S3 был частью языка, когда он был описан как "Новый язык S". В настоящее время я вижу, что вы все еще можете получить использованные копии на Amazon:

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 методы.

Другие вопросы по тегам