我的问题是magrittr
包裹%>%
的管道运营商按运营顺序排在哪里?
我有一个与以下问题类似的问题:
set.seed(10)
df <- data.frame(a=rnorm(3),b=rnorm(3),c=rnorm(3))
df/rowSums(df) %>% round(.,3)
这导致以下非圆形数字:
a b c 1 -0.0121966 0.119878 0.8922125
要获得舍入的数字,我需要将df/rowSums(df)
放在括号之间。
我使用+
,-
,*
,/
和^
进行了实验,结果我发现操作顺序如下:
这是对的还是我对管道操作员的理解有问题?
答案 0 :(得分:9)
您要查找的帮助页面是?Syntax
。 (不要因为找不到这个而感觉不好,我在搜索关键字上花了六个猜测。)我将在这里引用它的整个运算符优先级表:
定义了以下一元和二元运算符。他们是 列出在优先级组中,从最高到最低。
‘:: :::’ access variables in a namespace ‘$ @’ component / slot extraction ‘[ [[’ indexing ‘^’ exponentiation (right to left) ‘- +’ unary minus and plus ‘:’ sequence operator ‘%any%’ special operators (including ‘%%’ and ‘%/%’) ‘* /’ multiply, divide ‘+ -’ (binary) add, subtract ‘< > <= >= == !=’ ordering and comparison ‘!’ negation ‘& &&’ and ‘| ||’ or ‘~’ as in formulae ‘-> ->>’ rightwards assignment ‘<- <<-’ assignment (right to left) ‘=’ assignment (right to left) ‘?’ help (unary and binary)
所以magrittr的管道运算符,如 all 形式为%whatever%
的运算符,确实具有大于乘法和除法但优于取幂的优先级,并且这是有保证的按语言规范。
就个人而言,我没有看到这些运营商的价值。为什么不写
round(df/rowSums(df), 3)
哪个具有您想要的评估顺序,并且(IMNSHO)也更容易阅读?