Types and classes of variables

ClassRTypes

Class Problem Overview


Two R questions:

  1. What is the difference between the type (returned by typeof) and the class (returned by class) of a variable? Is the difference similar to that in, say, C++ language?
  2. What are possible types and classes of variables?

Class Solutions


Solution 1 - Class

In R every "object" has a mode and a class. The former represents how an object is stored in memory (numeric, character, list and function) while the later represents its abstract type. For example:

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

As you can see data frames are stored in memory as list but they are wrapped into data.frame objects. The latter allows for usage of member functions as well as overloading functions such as print with a custom behavior.

typeof(storage.mode) will usually give the same information as mode but not always. Case in point:

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

The reasoning behind this can be found here:

> The R specific function typeof returns the type of an R object > > Function mode gives information about the mode of an object in the sense of Becker, Chambers & Wilks (1988), and is more compatible with other implementations of the S language

The link that I posted above also contains a list of all native R basic types (vectors, lists etc.) and all compound objects (factors and data.frames) as well as some examples of how mode, typeof and class are related for each type.

Solution 2 - Class

type really refers to the different data structures available in R. This discussion in the R Language Definition manual may get you started on objects and types.

On the other hand, class means something else in R than what you may expect. From the R Language Definition manual (that came with your version of R):

> 2.2.4 Classes > > R has an elaborate class system1, principally controlled via the class attribute. This attribute is a character vector containing the list > of classes that an object inherits from. This forms the basis of the “generic methods” functionality in R. > > This attribute can be accessed and manipulated virtually without restriction by users. There is no checking that an object actually contains the components that class methods expect. Thus, altering the class attribute should be done with caution, and when they are available specific creation and coercion functions should be preferred.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLeoView Question on Stackoverflow
Solution 1 - ClassdiliopView Answer on Stackoverflow
Solution 2 - ClassDirk EddelbuettelView Answer on Stackoverflow