Два питання R:
- Яка різниця між типом (повертається
typeof
) та класом (повертаєтьсяclass
) змінної? Чи подібна різниця подібна, скажімо, до мови С ++? - Які можливі типи та класи змінних?
Два питання R:
typeof
) та класом (повертається class
) змінної? Чи подібна різниця подібна, скажімо, до мови С ++?Відповіді:
У 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"
Обґрунтування цього можна знайти тут :
Функція До конкретних TypeOf повертає тип об'єкта R
Функціональний режим дає інформацію про режим об'єкта у розумінні Беккера, Чемберса і Вілкса (1988) і є більш сумісним з іншими реалізаціями мови S
Посилання , яку я відправив вище , також містить список всіх нативного R basic types
(вектори, списки і т.д.) і всі compound objects
(фактори і data.frames), а також деякі приклади того , як mode
, typeof
і class
пов'язані для кожного типу.
oldClass(matrix(1:10, 2,5)) # NULL
type
справді стосується різних структур даних, доступних у R. Це обговорення в посібнику з визначення мови R може допомогти вам розпочати роботу з об’єктами та типами.
З іншого боку, class
означає щось інше в R, ніж те, що ви можете очікувати. З посібника з визначення мови R (що додається до вашої версії R):
2.2.4 Класи
R має складну систему класів 1 , головним чином керовану через атрибут class. Цей атрибут - вектор символів, що містить список класів, від яких об'єкт успадковує. Це складає основу функціональності «загальних методів» у R.
Цей атрибут може бути доступний і маніпульований ним практично без обмежень з боку користувачів. Неможливо перевірити, чи об'єкт насправді містить компоненти, яких очікують методи класу. Таким чином, змінювати атрибут класу слід з обережністю, і коли вони доступні, слід віддавати перевагу спеціальним функціям створення та примусу.