使用":"(冒号)时运算符优先顺序

Mar*_*arc 10 r r-faq

我试图使用以两种看似相同的方式表示的数字向量从向量中提取值:

x <- c(1,2,3)
x[2:3]
# [1] 2 3
x[1+1:3]
# [1]  2  3 NA
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么表达式x[2:3]产生的结果不同x[1+1:3]- 第二个包含最后的NA值.我错过了什么?

pla*_*pus 12

因为运营商:优先于,+所以1+1:3真的1+(1:3)(即2:4)而不是2:3.因此,要将执行顺序更改为已定义的运算符优先级,请使用括号()

您可以在帮助文件中查看运算符的优先顺序?Syntax.以下是相关部分:

定义了以下一元和二元运算符.它们列在优先级组中,从最高到最低.
:: ::: 访问变量在命名空间
$ @ 组件/槽中提取
[ [[ 索引
^ 求幂(从右到左)
- + 一元减号和加
: 序列运算符
%any% 特殊运算符(包括%%%/%)
* / 乘,除
+ - (二进制)加,减