因为历史的原因(更新过好多次,前身是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
mode storage.mode typeof 是一类,检查变量类型,如list integer character等关系是,从前往后,检查精度越来越细。所以当想看粗类别时,就用mode,看细类别用typeof.
# 此时后两者都能查到最细的程度
mode(1:5) # numeric
storage.mode(1:5) # integer
typeof(1:5) # integer
# 此时只有typeof能查到最细的程度
mode(`+`) # function
storage.mode(`+`) # function
typeof(`+`) # builtin
# 这里稍微解释一下,`+`是一个函数
# 下面两个例子等价
1+2 # 3
`+`(1,2) # 3
class和另外三个不是一个体系
对于有”class”属性的变量,返回的就是这个属性对应的值
对于没有”class”属性的变量,则根据它的类型、维度来确定
# 有"class"属性,只认属性
a <- 1:6
df <-data.frame(a,a+1)
class(df) # data.frame
class(df)<- "abc" # 随便定义一个值
class(df) # abc
#没有属性,根据类型和dim属性
ar <- array(1:4)
attributes(ar) # 数组dim为4
mat <- matrix(1:4)
attributes(mat) # 矩阵dim为4 1 两个值
a <- 1:4 # 没有dim
class(a) # integer
aar <- structure(a,dim=4) # 赋予类似array的dim
class(aar) # array
amat <- structure(a,dim=c(4,1)) # 赋予类似matrix的dim
class(amat) # matrix
class(list(1:4)) # list 不一样类型
R中有许多用于存储数据的结构,包括标量、向量、数组、数据框和列表。多样化的数据结构赋予了R极其灵活的数据处理能力。R可以处理的数据类型包括数值型、字符型、逻辑型(TRUE/FALSE)、复数型(虚数)和原生型(字节)。数据框(data frame)是R中用于存储数据的一种结构:列表示变量,行表示观测。在同一个数据框中可以存储不同类型(如数值型、字符型)的变量。数据框将是你用来存储数据集的主要数据结构。因子(factor)是名义型变量或有序型变量。它们在R中被特殊地存储和处理。
class()函数可以查询变量的抽象类型,typeof()函数可以查询变量在内存中保存的方式,is.integer() 函数可以判断数据是否为整型,这个函数同样可以判断其他的数据类型,as.integer() 函数可以将数据强制转换为整型,其它数据类型也适用,length() 函数可以返回变量的长度。
1、数值型(numerical)变量
在控制台中键入下列命令建立数值型变量并查看变量类型:
2、字符型(character)变量
在控制台中键入下列命令建立字符型型变量并打印:
3、逻辑型(logical)变量
在控制台中键入下列命令建立逻辑性变量并查看变量类型:
4、复合型(complex)变量
R中的复合型变量指数学上的复数,包括实部和虚部,定义如下: