R语言object的type, mode和class

本文深入探讨了R语言中对象的类型系统,包括基本类型如数值、字符、逻辑等,复合类型如列表、函数,以及S4类。解析了type、mode和class的区别与联系,帮助读者理解R语言的对象结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值