Previous: Function calls, Up: Simple evaluation



3.1.4 操作符

R 允许使用 C 语言类似的操作符构建算术表达式, 例如,

     > 1 + 2
     [1] 3

表达式可以用括号合并成组,混以函数调用, 然后以一种直接的方式赋给变量

     > y <- 2 * (a + log(x))

R 含有一系列操作符。它们如下表所示。

- 减号,一元操作符或者二元操作符
+ 加号,一元操作符或者二元操作符
! 一元否操作符
~ 波浪号,用于模型公式,既可以是一元操作符也可以是二元操作符
? 帮助
: 序列,二元操作符(在模型公式中,表示交互效应)
* 乘法,二元操作符
/ 除法,二元操作符
^ 幂运算符,二元操作符
%x% 特殊二元操作符,x可以被任意合法的名字替换
%% 求模,二元操作符
%/% 整除,二元操作符
%*% 矩阵相乘,二元操作符
%o% 外积,二元操作符
%x% Kronecker乘积,二元操作符
%in% 匹配操作,二元操作符(在模型公式中,表示嵌套)
< 小于,二元操作符
> 大于,二元操作符
== 等于,二元操作符
>= 大于等于,二元操作符
<= 小于等于,二元操作符
& 与操作,二元操作符,向量模式
&& 与操作,二元操作符,不是向量模式
| 或操作,二元操作符,向量模式
|| 或操作,二元操作符,不是向量模式
<- 左赋值,二元操作符
-> 右赋值,二元操作符
$ 列表子集,二元操作符

除了语法上,操作符使用和函数调用没有差异。 事实上,x + y"+"(x, y) 等价。 注意既然 + 不是一个标准的函数名字, ,那么它就需要被引号括起来。

R 同时处理数据的整个向量,并且大多数元素操作符和基本的数学函数如 log是向量模式的(和上面表格中提示的一样)。这意味着如果两个一样 长度的向量相加会隐式依据向量索引循环计算得到一个 含有元素方式加和结果的向量。 这种用法同样适合其它操作符,如-*, 和 /,以及可以推广到更高维的结构。 需要注意的是,两个矩阵的相乘不会得到 通常的矩阵乘积(%*%操作符用于这种目的)。 一些和向量操作相关的要点将会在 Elementary arithmetic operations 部分讨论。

为访问向量的某个元素,我们常常使用 x[i] 语句。

     > x <- rnorm(5)
     > x
     [1] -0.12526937 -0.27961154 -1.03718717 -0.08156527  1.37167090
     > x[2]
     [1] -0.2796115

列表分量则更多地用 x$ax[[i]] 方式访问。

     > x <- options()
     > x$prompt
     [1] "> "

索引构造(Indexing constructs)同样可以出现在一个赋值操作的右边。 和其它操作符类似,索引实际上也是通过函数实现, 可以用 "["(x, 2) 代替 x[2]

R的索引操作含有许多高级特性。这部分内容将在 Indexing部分进一步描述。