R语言中,mode和class有何区别

Python012

R语言中,mode和class有何区别,第1张

1、对象类属性的不同

首先,mode和typeof可以归为一个类别,class是另外一个类别。mode和typeof描述的是数据在内存中的存储类型;class描述的是对象的类属性,因为历史的原因更新过好多次,前身是S语言,所以R语言中数据对象的存储类型变化过好多次。

2、精确度的不同

mode和storage.mode得到的是一种比较古老的类型,来自于S语言,其中storage.mode比mode要更精确mode(3L)#numericstorage.mode(3L)#integertypeof是一种最新的查看类型的函数,针对于R语言而非S语言,而且更为精确,更为细致。

对于指定类属性的数据对象,class和oldClass的结果是一样的a=data.frame(1:10)oldClass(a)#"data.frame"class(a)#"data.frame"但是如果没有指定数据对象的类属性,那么oldClass返回NULL,而class会根据数据对象的存储类型(type)与维度属性来自动给出一个类属性。

3、表示方式的不同

mode:表示对象在内存中的存储类型,基本数据类型'atomic'mode:numeric(Integer/double),complex,character和logical,递归的对象(recursiveobject):'list'或'function'。

class:是一种抽象类型,或者理解为一种数据结构(数据框,因子,列表),他主要是用来给泛型函数(参考java中泛型的概念)识别参数用。所以当给函数传参数的时候如果发生错误,就查看class属性。

首先,mode和typeof可以归为一个类别,class是另外一个类别。mode和typeof描述的是数据在内存中的存储类型;class描述的是对象的类属性(比如马就是一个类,红马或者白马就是子类,张三的白马和李四的红马就是对象,马这个类有什么属性就是类属性,就像颜色,体重等等)

因为历史的原因(更新过好多次,前身是S语言),所以R语言中数据对象的存储类型变化过好多次。mode和storage.mode得到的是一种比较古老的类型,来自于S语言,其中storage.mode比mode要更精确

mode(3L) # numeric

storage.mode(3L) # integer

typeof 是一种最新的查看类型的函数,针对于R语言而非S语言,而且更为精确,更为细致

storage.mode(`identical`) # function

storage.mode(`if`)# function

typeof(`identical`) # closure

typeof(`if`) # special

class和oldClass返回对象的类属性。对于指定类属性的数据对象,class和oldClass的结果是一样的

a=data.frame(1:10)

oldClass(a) # "data.frame"

class(a) # "data.frame"

但是如果没有指定数据对象的类属性,那么oldClass返回NULL,而class会根据数据对象的存储类型(type)与维度属性来自动给出一个类属性

oldClass(3L) # NULL

class(3L) # integer

class(structure(3L, dim=1)) # array

class(structure(3L, dim=c(1,1))) # matrix