作者:lou123456_541 | 来源:互联网 | 2022-11-14 10:58
我一直在寻找很多答案,但我仍然无法完全理解它们.例如,最明显的一个(在这里),其中包括(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
上面的代码来自magrittr中对%>%的解释,其中我也试图理解管道运算符(我知道它给你以前计算的结果,但是aggregate
当它混合时我在代码行中迷路了).
,并%>%
在同一个功能内.
所以,我无法理解上面的代码是什么.我有结果(我把它放在上面).但我不知道它是如何达到那个结果的,特别是aggregate
代码行,它使用点和~
符号.我知道这~
意味着"所有其他变量",但它对点的意义是什么?它有另一种含义或应用吗?管道操作员在特定功能中的作用是什么?
1> MrFlick..:
该行使用.
三种不同的方式.
[1] [2] [3]
aggregate(. ~ cyl, data = ., FUN = . %>% mean %>% round(2))
一般来说,您将管道中的值传递到特定位置的函数,.
但有一些例外.一个例外是.
在公式中.该~
用于创建在R.式中的管不会改变式的意义,所以它的行为就像它会不发生任何转义.例如
aggregate(. ~ cyl, data=mydata)
这只是因为aggregate
需要左右两侧的公式.因此,.
在[1]
仅仅意味着"数据集中的所有其他列." 这种用法与magrittr完全无关.
在.
在[2]
是真实传递中作为管的值.如果你有一个plain .
作为函数的参数,那就是那里的值.因此,结果subset()
将转到data=
参数.
该magrittr
库还允许您使用.
变量定义匿名函数.如果你有一个以a开头的链.
,它被视为一个函数.所以
. %>% mean %>% round(2)
是相同的
function(x) round(mean(x), 2)
所以你只是用.
at 创建一个自定义函数[3]