最近我发现了%$%
管道运算符,但是我不明白它与%>%
的区别,并且它能否完全代替它。
使用%$%
的动机
- 在许多情况下,运算符
%$%
可以替代%>%
:
mtcars %>% summary()
mtcars %$% summary(.)
mtcars %>% head(10)
mtcars %$% head(.,10)
- 显然,
%$%
比%>%
更易用:
mtcars %>% plot(.$hp, .$mpg) # Does not work
mtcars %$% plot(hp, mpg) # Works
- 隐式填充内置数据参数:
mtcars %>% lm(mpg ~ hp, data = .)
mtcars %$% lm(mpg ~ hp)
- 由于在键盘上,
%
和$
相邻,所以插入%$%
比插入%>%
更方便。
文档
我们可以在它们各自的帮助页面中找到以下信息。
(?magrittr::`%>%`
):
Description:
Pipe an object forward into a function or call expression.
Usage:
lhs %>% rhs
(?magrittr::`%$%`
):Description:
Expose the names in ‘lhs’ to the ‘rhs’ expression. This is useful
when functions do not have a built-in data argument.
Usage:
lhs %$% rhs
我无法理解两个管道操作符之间的区别。 将对象传输和暴露名称有什么区别?但是,在%$%
的右侧,我们可以使用.
获取管道对象,对吗?
我应该开始使用%$%
而不是%>%
吗?这样做可能会遇到哪些问题?
%$%
特别强大。但是你会发现,如果使用例如“dplyr”或“tidyr”等包,相对于你的特定示例,%$%
的用处要少得多,因为这些包(以及其他类似的包)在 LHS 上下文中执行自己的名称查找。 - Konrad Rudolph|>
,因为它不依赖于任何包。 - Grzegorz Sapijaszko%$%
的代码应该是'%$%' <- with
,现在我们可以使用点号,你建议的用法在我看来并不荒谬。只是不寻常,因为大多数用户使用%>%
。还有几个注释,你可以在 Studio 中使用 ctrl + shift + M 来节省打字时间,在你的 lm 示例中,数据参数没有被隐式填充,它是缺失的,但是 mpg 和 hp 在本地环境中作为独立对象被找到,所以不需要它。 - moodymudskipper