Chr*_*ris 4 r pipe dplyr magrittr
我一直在寻找很多答案,但我仍然无法完全理解它们.例如,最明显的一个(在这里),其中包括(1,2,3)给出了具体的实例对点的各种用途,但我不能在这里理解,例如,它的应用:
car_data <-
mtcars %>%
subset(hp > 100) %>%
aggregate(. ~ cyl, data = ., FUN = . %>% mean %>% round(2)) %>%
transform(kpl = mpg %>% multiply_by(0.4251)) %>%
print
#result:
cyl mpg disp hp drat wt qsec vs am gear carb kpl
1 4 25.90 108.0 111.0 3.94 2.15 17.75 1.00 1.00 4.50 2.00 11.010
2 6 19.74 183.3 122.3 3.59 3.12 17.98 0.57 0.43 3.86 3.43 8.391
3 8 15.10 353.1 209.2 3.23 4.00 16.77 0.00 0.14 3.29 3.50 6.419
Run Code Online (Sandbox Code Playgroud)
上面的代码来自magrittr中对%>%的解释,其中我也试图理解管道运算符(我知道它给你以前计算的结果,但是aggregate当它混合时我在代码行中迷路了).,并%>%在同一个功能内.
所以,我无法理解上面的代码是什么.我有结果(我把它放在上面).但我不知道它是如何达到那个结果的,特别是aggregate代码行,它使用点和~符号.我知道这~意味着"所有其他变量",但它对点的意义是什么?它有另一种含义或应用吗?管道操作员在特定功能中的作用是什么?
该行使用.三种不同的方式.
[1] [2] [3]
aggregate(. ~ cyl, data = ., FUN = . %>% mean %>% round(2))
Run Code Online (Sandbox Code Playgroud)
一般来说,您将管道中的值传递到特定位置的函数,.但有一些例外.一个例外是.在公式中.该~用于创建在R.式中的管不会改变式的意义,所以它的行为就像它会不发生任何转义.例如
aggregate(. ~ cyl, data=mydata)
Run Code Online (Sandbox Code Playgroud)
这只是因为aggregate需要左右两侧的公式.因此,.在[1]仅仅意味着"数据集中的所有其他列." 这种用法与magrittr完全无关.
在.在[2]是真实传递中作为管的值.如果你有一个plain .作为函数的参数,那就是那里的值.因此,结果subset()将转到data=参数.
该magrittr库还允许您使用.变量定义匿名函数.如果你有一个以a开头的链.,它被视为一个函数.所以
. %>% mean %>% round(2)
Run Code Online (Sandbox Code Playgroud)
是相同的
function(x) round(mean(x), 2)
Run Code Online (Sandbox Code Playgroud)
所以你只是用.at 创建一个自定义函数[3]
| 归档时间: |
|
| 查看次数: |
864 次 |
| 最近记录: |