热线电话:13121318867

登录
2020-08-20 阅读量: 2902
R的数据结构

1、R的对象与属性

我们已经知道R通过一些对象来运行,这些对象是用它们的名称和内容来 刻画的,其次也通过对象的数据类型即属性来刻画. 所有的对象都有两个内在 属性:类型和长度. 类型是对象元素的基本种类,共有四种:

数值型, 包括

– 整型

– 单精度实型

– 双精度实型

字符型

复数型1

逻辑型(FALSE、TRUE或NA)

虽然还存在其它的类型,例如函数或表达式, 但是它们并不能用来表示数 据;长度是对象中元素的数目. 对象的类型和长度可以分别通过函数mode( ) 和length( )得到. 例如

> x <- 1

> mode(x)

[1] "numeric"

> length(x)

[1] 1

> A <- "Gomphotherium"; compar <- TRUE; z <- 1i > mode(A); mode(compar); mode(z)

[1] "character"

[1] "logical"

[1] "complex"

无论什么类型的数据,缺失数据总是用NA(Not Available的意思)来表示;对很大的数值则可用指数形式表示:

> N <- 2.1e23

>N

[1] 2.1e+23

R可以正确地表示无穷的数值,如用Inf和-Inf表示􏰀8和8,或者用NaN(Not a Number 的意思)表示不是数字的值.

> x <- 5/0

>x

[1] Inf

> exp(x) [1] Inf

> exp(-x)

[1] 0

> Inf - Inf

[1] NaN

> 0/0

[1] NaN

>sqrt{-7)

[1] NaN

Warning message:

产生了NaNs in: sqrt(-17) >sqrt(-17+0i) # 按照复数进行运算 [1] 0+4.123106i

字符型的值输入时须加上双引号",如果需要引用双引号的话,可以让它 跟在反斜杠“\”后面, 在某些函数如cat( )的输出显示或write.table( )写 入磁盘时会被以特殊的方式处理. 例如

> x <- "Double quotes \" delimitate R's strings." >x

[1] "Double quotes \" delimitate R's strings."

> cat(x)

Double quotes " delimitate R's strings.

另一种表示字符型变量的方法,即用单引号(’)来界定变量,这种情况下不需 要用反斜杠来引用双引号.

> x <- 'Double quotes " delimitate R\'s strings.'

>x

[1] "Double quotes \" delimitate R's strings."

表2.1概括了表示数据对象的类别:

表 2.1 数据对象及类型

是否允许 对象 类型 同一个对象中 有多种类型?

向量 数值型,字符型,复数型,逻辑型 否 因子 数值型, 字符型 否 数组 数值型,字符型,复数型,逻辑型 否 矩阵 数值型,字符型,复数型,逻辑型 否 数据框 数值型,字符型,复数型,逻辑型 是 时间序列(ts) 数值型,字符型,复数型,逻辑型 否 列表 数值型,字符型,复数型,逻辑型, 是

函数,表达式,...

说明

1) 向量是一个变量(的取值),是R中最常用、最基本的操作对象;因子是一 个分类变量;数组是一个k维的数据表;矩阵是数组的一个特例,其维 数k 􏰐 2.

注意: 数组或者矩阵中的所有元素都必须是同一种类型的;数据框是由 一个或几个向量和(或)因子构成,它们必须是等长的,但可以是不同的 数据类型;“ts”表示时间序列数据,它包含一些额外的属性,例如频率 和时间;列表可以包含任何类型的对象,包括列表!

2) 对于一个向量,用它的类型和长度足够描述数据;而其它的对象则另需 一些额外信息,这些信息由外在的属性给出, 例如这些属性中的表示对象


维数的dim. 比如一个2行2列的的矩阵,它的dim是一对数值[2,2],但是其

长度是4.

3) R中有三种主要类型的运算符, 表2.2是这些运算符的列表. 其中数学运算 符和比较运算符作用于两个元素上(例如x + y, a < b);数学运算符不只 是作用于数值型或复数型变量,也可以作用在逻辑型变量上;在后一种 情况中,逻辑型变量被强制转换为数值型. 比较运算符可以适用于任何 类型:结果是返回一个或几个逻辑型变量; 逻辑型运算符适用于一个(对 于“!”运算符)或两个逻辑型对象(对于其它运算符),并且返回一个(或 几个)逻辑性变量. 运算符“逻辑与”和“逻辑或”存在两种形式:“&” 和“|”作用在对象中的每一个元素上并且返回和比较次数相等长度的逻 辑值;“&&”和“||”只作用在对象的第一个元素上.

表 2.2 数学运算 比较运算

运算符

+加法<小于 -减法>大于

* 乘法 <= 小于或等于 / 除法 >= 大于或等于 ^ 乘方==等于

%% 模 != 不等于 %/% 整除

!x 逻辑非 x&y 逻辑与 x && y 同上 x|y 逻辑或 x||y 同上 xor(x, y) 异或

逻辑运算

2 、浏览对象的信息

函数ls( )的功能是显示所有在内存中的对象. ls( )只会列出对象名,例

如:

> name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0.5 > ls( )

[1] "m" "n1" "n2" "name"


2.4 R的数据结构 如果只要显示出在名称中带有某个指定字符的对象,则通过设定选项pattern

来实现(可简写为pat) ):

> ls(pat = "m")

[1] "m" "name"

如果进一步限定显示名称中以某个字母开头的对象,则可使用命令:

> ls(pat = "^m")

[1] "m"

运行函数ls.str( )将会显示内存中所有对象的详细信息:

> ls.str( )

m: num0.5n1: num10n2: num100name: chr"Carmen"

在ls.str( )函数中另一个非常有用的选项是max.level, 它将规定显示 有关对象信息的详细级别. 缺省情况下,ls.str( ) 将会列出关于对象的所有 信息,包括数据框、矩阵,或数据列表的详细信息, 显示结果可能会很长. 但如 果设定max.level =-1 就可以避免这种情况了. 试比较:

> M <- data.frame(n1, n2, m)

> ls.str(pat = "M")

M : `data.frame': 1 obs. of 3 variables:

$ n1: num 10 $ n2: num 100 $ m : num 0.5

> ls.str(pat="M", max.level=-1)

M : `data.frame': 1 obs. of 3 variables:

要在内存中删除某个对象,可利用函数rm( ). 例如

X 运行rm(x)将会删除对象x

X 运行rm(x,y)将会删除对象x和y

X 运行rm(list=ls( ))则会删除内存中的所有对象

X 运行rm(list=ls(pat="^m"))则会删除对象中以字母m开头的对象

下面我们通过具体的例子说明向量(包括数值型向量、字符型向量、逻辑型向量和因子型向量)、矩阵、数据框、列表和时间序列的构成方法.


110.0839
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子