Типи та класи змінних


84

Два питання R:

  1. Яка різниця між типом (повертається typeof) та класом (повертається class) змінної? Чи подібна різниця подібна, скажімо, до мови С ++?
  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"

Обґрунтування цього можна знайти тут :

Функція До конкретних TypeOf повертає тип об'єкта R

Функціональний режим дає інформацію про режим об'єкта у розумінні Беккера, Чемберса і Вілкса (1988) і є більш сумісним з іншими реалізаціями мови S

Посилання , яку я відправив вище , також містить список всіх нативного R basic types(вектори, списки і т.д.) і всі compound objects(фактори і data.frames), а також деякі приклади того , як mode, typeofі classпов'язані для кожного типу.


1
"У R кожен" об'єкт "має режим і клас", якщо вони розглядаються з точки зору структури класу ООП S4. У S3 об'єкти можуть не отримувати імен класів:oldClass(matrix(1:10, 2,5)) # NULL
Ердоган ЦЕВЕР

6

typeсправді стосується різних структур даних, доступних у R. Це обговорення в посібнику з визначення мови R може допомогти вам розпочати роботу з об’єктами та типами.

З іншого боку, classозначає щось інше в R, ніж те, що ви можете очікувати. З посібника з визначення мови R (що додається до вашої версії R):

2.2.4 Класи

R має складну систему класів 1 , головним чином керовану через атрибут class. Цей атрибут - вектор символів, що містить список класів, від яких об'єкт успадковує. Це складає основу функціональності «загальних методів» у R.

Цей атрибут може бути доступний і маніпульований ним практично без обмежень з боку користувачів. Неможливо перевірити, чи об'єкт насправді містить компоненти, яких очікують методи класу. Таким чином, змінювати атрибут класу слід з обережністю, і коли вони доступні, слід віддавати перевагу спеціальним функціям створення та примусу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.