理解 magrittr pipe `%>%` 语法的正确使用
Understanding the correct use of magrittr pipe `%>%` syntax
我有一个命名的数值向量,我试图用其中的每个元素除以所有元素的总和。然后我想用signif
函数四舍五入到有效数字。通过计算除法和存储变量,然后使用存储的变量计算有效数字,这很容易做到“老派”。但是,如果我尝试使用 magrittr
管道运算符 (%>%
) 直接对计算进行管道传输,signif
不会对向量执行任何操作。
我试图了解区别是什么,因为我经常 运行 将管道与基本 R 函数结合使用时出现问题。
这是一个例子,我得到的输出是:
> # My named vector
> v <-setNames(c(1:5), letters[1:5])
> # Dividing each element by the total sum and rounding to significant figures
> a <- v/sum(v)
> a <- signif(a, digits = 3)
> # Dividing each element by the total sum and piping directly to signif()
> b <- v/sum(v) %>% signif(digits = 3)
> a
> b
a: 0.0667 b 0.133 c 0.2 d 0.267 e 0.333
a: 0.0666666666666667 b: 0.133333333333333 c: 0.2 d: 0.266666666666667 e: 0.333333333333333
按照@akrun 的提示:?Syntax
有
‘%any% |>’ special operators (including ‘%%’ and ‘%/%’)
‘* /’ multiply, divide
显示管道运算符的优先级高于 /
,因此您的表达式实际上是
v/(sum(v) %>% signif(digits = 3))
添加括号会有所帮助:尝试
(v/sum(v)) %>% signif(digits = 3)
我有一个命名的数值向量,我试图用其中的每个元素除以所有元素的总和。然后我想用signif
函数四舍五入到有效数字。通过计算除法和存储变量,然后使用存储的变量计算有效数字,这很容易做到“老派”。但是,如果我尝试使用 magrittr
管道运算符 (%>%
) 直接对计算进行管道传输,signif
不会对向量执行任何操作。
我试图了解区别是什么,因为我经常 运行 将管道与基本 R 函数结合使用时出现问题。
这是一个例子,我得到的输出是:
> # My named vector
> v <-setNames(c(1:5), letters[1:5])
> # Dividing each element by the total sum and rounding to significant figures
> a <- v/sum(v)
> a <- signif(a, digits = 3)
> # Dividing each element by the total sum and piping directly to signif()
> b <- v/sum(v) %>% signif(digits = 3)
> a
> b
a: 0.0667 b 0.133 c 0.2 d 0.267 e 0.333
a: 0.0666666666666667 b: 0.133333333333333 c: 0.2 d: 0.266666666666667 e: 0.333333333333333
按照@akrun 的提示:?Syntax
有
‘%any% |>’ special operators (including ‘%%’ and ‘%/%’)
‘* /’ multiply, divide
显示管道运算符的优先级高于 /
,因此您的表达式实际上是
v/(sum(v) %>% signif(digits = 3))
添加括号会有所帮助:尝试
(v/sum(v)) %>% signif(digits = 3)