Как я вижу существующие классы
Я использовал 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
методы.