|
我们在前面已经看到了R10中三种主要类型的运算符。下面是运算符的列
表:
运算符
数学运算比较运算逻辑运算
+ 加法< 小于! x 逻辑非
- 减法> 大于x & y 逻辑与
* 乘法<= 小于或等于x && y 同上
/ 除法>= 大于或等于x j y 逻辑或
^ 乘方== 等于x jj y 同上
%% 模!= 不等于xor(x, y) 异或
%/% 整除
数学运算符和比较运算符作用于两个元素上(x + y, a < b);数学运算
符不只是作用于数值型或复数型变量,也可以作用在逻辑型变量上;在后一
种情况中,逻辑型变量被强制转换为数值型。比较运算符可以适用于任何类
型:结果是返回一个或几个逻辑型变量。
逻辑型运算符适用于一个(对“!”运算符)或两个逻辑型对象(其它运
算符),并且返回一个(或几个)逻辑性变量。运算符“逻辑与”和“逻
辑或”存在两种形式:“&”和“j”作用在对象中的每一个元素上并且返回
和比较次数相等长度的逻辑值;“&&”和“jj”只作用在对象的第一个元素
上。
对于0 < x < 1这种类型的不等式必须使用算子“逻辑与”,这个不等式
将被改写成0 <x & x < 1。表达式0 < x < 1是合法的,但是不会返回所预
期的结果:因为两个运算符相同,它们将从左至右连续执行。首先完成0 <
x并返回一个逻辑变量,它将与1比较(TRUE或者FALSE< 1):在这种情形下,
这个逻辑变量被强制转换为数值(1或0 < 1)。
> x <- 0.5
> 0 < x < 1
[1] FALSE
比较运算符作用在两个被比较对象的每个元素上(如果需要,将循环使
用最短的变量),从而返回一个同样大小的对象。为了“整体”比较两个对
象,可以使用两个函数:identical和all.equal
> x <- 1:3; y <- 1:3
> x == y
[1] TRUE TRUE TRUE
> identical(x, y)
[1] TRUE
> all.equal(x, y)
[1] TRUE
identical比较数据的内在关系,如果对象是严格相同的返回TRUE,否
则返回FALSE。all.equal用来判断两个对象是否“近似相等”,返回结果
为TRUE或者对二者差异的描述。后一个函数在比较数值型变量时考虑到了计
算过程中的近似。在计算机中数值型变量的比较有时很是令人惊奇。
> 0.9 == (1 - 0.1)
[1] TRUE
> identical(0.9, 1 - 0.1)
[1] TRUE
> all.equal(0.9, 1 - 0.1)
[1] TRUE
> 0.9 == (1.1 - 0.2)
[1] FALSE
> identical(0.9, 1.1 - 0.2)
[1] FALSE
> all.equal(0.9, 1.1 - 0.2)
[1] TRUE
> all.equal(0.9, 1.1 - 0.2, tolerance = 1e-16)
[1] "Mean relative difference: 1.233581e-16"
|
|