R包开发:如何用::调用purrr的%>%?是否应改用magrittr?
关于R包开发中管道操作符的问题解答
为什么purrr::%>%会报错?
其实原因很直接:purrr包本身并没有导出%>%这个操作符。purrr只是在内部依赖magrittr来使用管道,但并没有把这个操作符暴露出来让你直接通过purrr::调用,所以R会提示找不到这个对象,自然就报错了。
应该从magrittr还是purrr调用%>%?
答案是:优先从magrittr调用,具体原因和建议如下:
%>%的原生归属就是magrittr包,它是magrittr的核心功能之一,magrittr专门维护这个操作符的所有特性(比如占位符.的灵活用法、复合管道%>%>%、 tee管道%T>%等)。- 如果你在开发R包,推荐遵循这些最佳实践:
- 在包的
DESCRIPTION文件里,把magrittr添加到Imports字段; - 在
NAMESPACE文件里,用importFrom(magrittr, "%>%")导入这个操作符,这样你的包代码里可以直接写%>%,用户使用你的包时也不需要额外加载magrittr。 - 如果你不想在NAMESPACE里导入,也可以在代码里直接写
magrittr::%>%,这样依赖关系更明确。
- 在包的
额外小提示:考虑R原生管道|>
从R 4.1.0版本开始,R自带了原生管道操作符|>,它的基础用法和%>%几乎一致。如果你的包不需要magrittr的特殊管道功能(比如上面提到的占位符高级用法、特殊管道类型),可以考虑改用|>,这样能减少你的包对第三方包的依赖,让包更轻量化。
内容的提问来源于stack exchange,提问作者Nicolas Molano
相关产品推荐
相关产品推荐

