当前位置: 首页 > 工具软件 > typer > 使用案例 >

R语言object的type, mode和class

敖永丰
2023-12-01

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() and expression(), 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 objectOO object,base object就是没有定义class属性的对象,而OO object,可以通过class()获取该对象的类型。
class是object的一种属性,泛函数根据object的class值调用对应的函数。一个object若没有定义class属性(base object),则class(x)函数通常和mode(x)函数返回相同的值。
一个object可以不定义class,也可以定义一个或多个class。

 类似资料: