type
也叫base type。R语言中每个object都有base type,通过typeof()
函数获取。
一个object只有一种type。type有如下几种分类:
- Vectors
- NULL (NILSXP)
- logical (LGLSXP)
- integer (INTSXP)
- double (REALSXP)
- complex (CPLXSXP)
- character (STRSXP)
- list (VECSXP)
- raw (RAWSXP)
- Functions
- closure, regular R functions, CLOSXP
- special, internal functions, SPECIALSXP
- builtin, primitive functions, BUILTINSXP
- S4, S4SXP
- Language components
- symbol (aka name, SYMSXP)
- language (usually called calls, LANGSXP)
- pairlist (used for function arguments, LISTSXP)
- expression, special purpose type that’s only returned by
parse()
andexpression()
, EXPRSXP
- internal used in R
mode
mode的概念是为了兼容S语言遗留下来的,在R语言中不建议使用,看到type和mode不相同也不用太纠结。获取mode的函数有mode()
或sotrage.mode()
。
mode可以理解为object的存储结构的标识,一个object只有一种mode。
最基础的原子mode有
- nemuric
- character
- logical
- complex
复合(recursive)类型的object的mode有:
- list
- function
- others…
mode一般和types相同,除了一下几种情况(来自R help):
- types “integer” and “double” are returned as “numeric”.
- types “special” and “builtin” are returned as “function”.
- type “symbol” is called mode “name”.
- type “language” is returned as “(” or “call”.
对象的强制类型转换(coercion)可以通过修改mode的值实现:
> a
[1] 1 2 3 4
> mode(a)
[1] "numeric"
> mode(a) <- "character"
> a
[1] "1" "2" "3" "4"
> mode(a)
[1] "character"
class
R语言中,object分为base object和OO object,base object就是没有定义class属性的对象,而OO object,可以通过class()获取该对象的类型。
class是object的一种属性,泛函数根据object的class值调用对应的函数。一个object若没有定义class属性(base object),则class(x)函数通常和mode(x)函数返回相同的值。
一个object可以不定义class,也可以定义一个或多个class。