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开头的对象
下面我们通过具体的例子说明向量(包括数值型向量、字符型向量、逻辑型向量和因子型向量)、矩阵、数据框、列表和时间序列的构成方法.
暂无数据