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

Order of operator precedence when using ":" (the colon)

提问人:Marc 提问时间:6/7/2014 最后编辑:HenrikMarc 更新时间:7/19/2022 访问量:1162

问:

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

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

运算符优先级 R-FAQ

评论

0赞 Mark Miller 6/7/2014
1+1 = 2(第二个元素)、1+2=3(第三个元素)和 1+3=4(第四个元素),而你的向量只有三个元素长。没有第四个元素,所以你得到 NA。尝试 (1+1):3。

答:

15赞 plannapus 6/7/2014 #1

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

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

定义了以下一元运算符和二元运算符。它们按优先级组(从高到低)列出。
访问命名空间中的变量
组件/插槽提取

索引 幂(从右到左) 一元 减号和加号 序列运算符 特殊运算符
(包括和 ) 乘、除
(二进制)


:::::$@[[[^-+:%any%%%%/%*/+-