Режим, класс и тип объектов R

39

Мне было интересно, каковы различия между объектами Mode, Class и Type of R? Тип объекта R может быть получен с помощью функции typeof (), mode by mode () и class by class ().

Также какие-нибудь другие подобные функции и понятия, которые я пропустил?

Спасибо и всего наилучшего!

Тим
источник
2
str (переменная) - ваш лучший друг.
Брэндон Бертельсен
2
Смотрите также R: Типы и классы переменных вопрос о переполнении стека.
Лев

Ответы:

21

class()Используется для определения / определить , что «типа» объект является с точки зрения объектно-ориентированного программирования в R. Таким образом , для

> x <- 1:3
> class(x)
[1] "integer"

любая общая функция, которая имеет "целочисленный" метод, будет использоваться.

typeof()дает «тип» объекта с точки зрения R, а mode()«тип» объекта с точки зрения Becker, Chambers & Wilks (1988). Последнее может быть более совместим с другими реализациями S в соответствии с Определение R Язык руководства.

Я бы, вероятно, допустил ошибку при использовании typeof()в большинстве случаев, если только это не для передачи объектов R в скомпилированный код, где storage.mode()это будет полезно.

Это полезно обсудить в определении языка R, как указано выше.

Восстановить Монику - Дж. Симпсон
источник
3
Почему так много точек зрения? Я не вижу никакой выгоды, кроме путаницы.
Smwikipedia
1
@smwikipedia, потому что R имеет наследие, которое включает в себя S-Plus и S, и этот последний язык развивался с течением времени. Кроме того, необходимо различать объекты, которые могут создавать пользователи, и базовые типы объектов.
Восстановить Монику - Г. Симпсон
@smwikipedia, потому что именно так и есть R. По той же причине мы имеем <-и =для назначения переменных.
Андре Терра
9

От: https://www.mail-archive.com/r-help@r-project.org/msg17169.html :

«Режим» - это взаимоисключающая классификация объектов в соответствии с их базовой структурой. «Атомные» режимы являются числовыми, сложными, символическими и логическими. Рекурсивные объекты имеют такие режимы, как «список», «функция» или несколько других. Объект имеет один и только один режим.

'class' - это свойство, присваиваемое объекту, которое определяет, как с ним работают универсальные функции. Это не взаимоисключающая классификация. Если объекту не присвоен конкретный класс, такой как простой числовой вектор, его класс обычно совпадает с его режимом, по соглашению.

Изменение режима объекта часто называют «принуждением». Режим объекта может меняться без необходимости изменения класса.

bearvarine
источник
1

Основное различие между class и typeof состоит в том, что первое может быть определено пользователем, но тип не может. Например, определить список

> x<-list("a",c(1,2))

> # x is a list
> class(x)
[1] "list"
> # class can be user defined
> class(x)<-"newclass"
> class(x)
[1] "newclass"

> typeof(x)
[1] "list"
# you cannot assign a different type using typeof()
> typeof(x)<-"newclass"
Error in typeof(x) <- "newclass" : could not find function "typeof<-" 

Чтобы дать определенное имя класса определенному пользователем объекту, очень полезно писать программы. Это позволяет помечать пользовательские объекты аналогично тому, что происходит в объектно-ориентированных языках программирования.

Карлос Рамирес Альварес
источник
Согласно Rдокументации для typeofи class, утверждение о «основном отличии» неверно. classявляется атрибутом объекта, который может быть назначен независимо от его внутреннего режима хранения, тогда как «typeof определяет тип (R internal) или режим хранения любого объекта». Один описывает логическую характеристику, а другой - физическую характеристику объекта.
whuber