Типы и классы переменных

85

Два вопроса R:

  1. В чем разница между типом (возвращенным typeof) и классом (возвращаемым class) переменной? Похожа ли разница на разницу, скажем, на языке C ++?
  2. Какие бывают типы и классы переменных?
Лео
источник
Этот связанный пост также может предоставить полезную информацию: stackoverflow.com/questions/8855589/…
Доминик Комтуа

Ответы:

96

В R каждый «объект» имеет a modeи a class. Первый представляет, как объект хранится в памяти (числовой, символьный, список и функция), а второй представляет его абстрактный тип. Например:

d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list

Как вы можете видеть, фреймы данных хранятся в памяти как listобёрнутые в data.frameобъекты. Последний позволяет использовать функции-члены, а также функции перегрузки, например, printс настраиваемым поведением.

typeof( storage.mode) обычно дает ту же информацию, modeно не всегда. Дело в точке:

typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"

Причину этого можно найти здесь :

Специальная функция R typeof возвращает тип объекта R

Функциональный режим дает информацию о режиме объекта в смысле Беккера, Чемберса и Уилкса (1988) и более совместим с другими реализациями языка S.

Ссылка , которую я отправил выше , также содержит список всех нативного R basic types(векторы, списки и т.д.) и все compound objects(факторы и data.frames), а также некоторые примеры того , как mode, typeofи classсвязаны для каждого типа.

делиоп
источник
1
«В R каждый« объект »имеет режим и класс,« если они рассматриваются с точки зрения структуры классов S4 OOP. В S3 объектам могут не быть присвоены имена классов:oldClass(matrix(1:10, 2,5)) # NULL
Эрдоган CEVHER
6

typeна самом деле относится к различным структурам данных, доступным в R. Это обсуждение в руководстве R Language Definition может помочь вам начать работу с объектами и типами.

С другой стороны, classв R означает нечто иное, чем то, что вы могли ожидать. Из руководства по определению языка R (которое прилагается к вашей версии R):

2.2.4 Классы

В R есть продуманная система классов 1 , управляемая главным образом через атрибут class. Этот атрибут представляет собой вектор символов, содержащий список классов, от которых наследуется объект. Это составляет основу функциональности «универсальных методов» в R.

Доступ к этому атрибуту и ​​управление им могут осуществляться практически без ограничений со стороны пользователей. Не проверяется, действительно ли объект содержит компоненты, ожидаемые методами класса. Таким образом, изменение атрибута класса должно выполняться с осторожностью, и когда они доступны, предпочтение следует отдавать конкретным функциям создания и принуждения.

Дирк Эддельбюттель
источник