Я изучаю R (я начал только на этой неделе), и я боролся с концепциями typeof, mode, storage.mode и класса. Я искал вверх и вниз (официальная документация R, StackOverflow, Google и т.д.), И я не смог найти ясного объяснения различий между ними. (Несколько qaru.site/info/455977/... и CrossValidated ответы на самом деле не помогли мне разозлить.) Наконец (надеюсь), я думаю, что понимаю, и поэтому мой вопрос заключается в проверке правильности моего понимания.
mode vs storage.mode: mode и storage.mode - это в основном то же самое, за исключением крошечного разница в том, как обрабатывается "одиночный" тип данных.
mode vs typeof: Очень похоже, за исключением нескольких различий, наиболее заметно, что оба (typeof "integer" и "double" ) = (режим "числовой" ); и оба (typeof "special" и "builtin" = (режим "функция" ).
class: Класс основан на объектно-ориентированной иерархии классов. Мне сложно найти это графически, но лучшее, что я смог найти, это диаграмма:
(Если кто-то может указать мне более точную иерархию R-класса, я его заменим.)
Хотя имена классов точно не соответствуют результатам функции R class(), я считаю, что иерархия в основном точна. Я понимаю, что "класс" объекта, т.е. Результат функции класса() - это корневой класс в иерархии. Так, например, "Вектор" не является корневым классом, поэтому он никогда не появляется в результате функции класса(). Корневой класс может быть скорее "StrVector" ( "character" ) или "BoolVector" ( "логический" ). Напротив, "Матрица" сама по себе является корневым классом; следовательно, его класс является "матрицей".
По-видимому, R поддерживает множественное наследование, поэтому некоторые объекты могут иметь более одного класса.
typeof/mode/storage.mode vs class: Это то, что для меня было самым сложным для понимания. Теперь я понимаю следующее: typeof/mode/storage.mode(который я буду называть далее просто "mode" ) - это в основном самый сложный тип данных, который объект R может удерживать как одно из своих значений, Так, например, поскольку матрицы, массивы и векторы могут содержать только один векторный тип данных, их режим (то есть самый сложный тип данных, который они могут удерживать) обычно является числовым, символьным или логическим, хотя их класс (их позиция в классе иерархия) - это нечто совершенно другое.
Если это становится наиболее интересным (то есть запутанным), это объекты, подобные спискам. Режим "списка" означает, что каждое значение в объекте может быть списком (то есть объектом, который может содержать различные типы данных). Таким образом, независимо от того, является ли сам класс "списком", существует несколько объектов (например, кадры данных), которые могут содержать различные значения, и поэтому этот режим является "списком", даже если их класс является чем-то другим.
Итак, в общем, я понимаю:
-
typeof/mode/storage.mode(почти то же самое) - это в основном самый сложный тип данных, который объект R может удерживать как одно из его значений; в то время как
-
class - объектная объектно-ориентированная классификация в соответствии с иерархией классов R.
Насколько я понимаю? Если нет, может кто-то, пожалуйста, дать более точное объяснение?