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

时间:2014-06-07 08:14:56

标签: r r-faq

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

x <- c(1,2,3)
x[2:3]
# [1] 2 3
x[1+1:3]
# [1]  2  3 NA

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

1 个答案:

答案 0 :(得分:12)

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

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

  

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