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

Posted

技术标签:

【中文标题】使用“:”(冒号)时的运算符优先顺序【英文标题】:Order of operator precedence when using ":" (the colon) 【发布时间】:2014-07-28 12:22:02 【问题描述】:

我正在尝试使用以两种看似等效的方式表示的数字向量从向量中提取值:

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+1 = 2(第二个元素)、1+2=3(第三个元素)和 1+3=4(第四个元素),您的向量只有三个元素长。没有第四个元素,所以你得到 NA。尝试 (1+1):3。 【参考方案1】:

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

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

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

【讨论】:

以上是关于使用“:”(冒号)时的运算符优先顺序的主要内容,如果未能解决你的问题,请参考以下文章

excel中公式中运算符的优先级

在EXCEL提供的4类运算符中,优先级最高的是啥?

与 ? 一起使用时的逗号运算符优先级: 运算符 [重复]

如何理解C语言的左结合 和右结合性

连接相邻字符串文字时的 Python 运算符优先级

VB里 运算符Mod与*先后顺序怎样