问题
R软件输出结果有误,你希望了解问题是否由运算符的优先级所导致的。
解决方
所有的运算符显示在表2-1中,并以最高优先级至最低优先级的顺序排列。相同优先级的运算符,除特指外皆由从左至右的顺序进行运算。
表2-1:运算符优先级 运算符含义参考 [ [[索引方法2.9 :: :::使用名称访问变量 $ @元素提取、位置提取 ^指数形式(从右到左) - +元素的负、正 :创建数列方法2.7,7.14 %any%特殊运算符讨论 * /乘、除讨论 + -加、减 == != < > <= >=比较运算符方法2.8 !逻辑取反 & && 逻辑“与”、 短路“与” 表2-1:运算符优先级(续) 运算符含义参考 | ||逻辑 “或”、 短路“或” ~公式方法11.1 -> ->>向右赋值方法2.2 = 赋值(从右向左)方法2.2 <- <<- 赋值(从右向左)方法2.2 ? 帮助 方法1.7
讨论
用户在R中搞错运算符的优先级是经常遇到的问题。我经常会犯这样的错误,例如我会不假思索地认为表达式0:n-1会生成从0~n-1的数列,但事实并非如此: > n <-10 > 0:n-1 [1] -1 0 1 2 3 4 5 6 7 8 9
该表达式生成-1~n-1的数列,因为R软件将上式理解为(0:n)-1。
你可能不熟悉表2-1中的符号%any%,R中用两个百分号夹带一个符号的形式(%...%)表示一个二元运算符。R中预定义的二元运算符的含义如下: %% 取模 %/% 整除 %*% 矩阵乘积 %in% 右侧变量中包含左侧变量时,为TRUE;否则,为FALSE。
你可以通过%...%记号来定义新的二元运算符,参见方法12.19。此种运算符都具有相同的运算优先级。
求土豪打赏红包