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


39

Мені було цікаво, чим відрізняються об'єкти Mode, Class та Type R? Тип об'єкта R може бути отриманий за допомогою функції typeof (), режиму за режимом () та класу за класом ().

Також будь-які інші подібні функції та концепції, які я пропустив?

Дякую та з повагою!


2
str (змінна) - ваш найкращий друг.
Брендон Бертелсен

2
Дивіться також R: Запитання про типи та класи змінних у Stack Overflow.
Лев

Відповіді:


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' - властивість, призначена об'єкту, яка визначає, як із ним функціонують загальні функції. Це не взаємовиключна класифікація. Якщо об'єкт не має призначеного йому специфічного класу, наприклад, простий числовий вектор, звичайно, його клас такий же, як його режим, за умовою.

Зміна режиму об'єкта часто називається «примусом». Режим об’єкта може змінюватися, не обов'язково змінюючи клас.


1

Основна відмінність класу від 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 внутрішній) тип або режим зберігання будь-якого об'єкта". Один описує логічну характеристику, а інший - фізичну характеристику предмета.
whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.