R加载MASS包时提示dplyr包的select函数被屏蔽该如何处理?
提示含义
你收到的是R语言加载包时的命名空间冲突提示,原提示内容如下:
正在加载程序包:‘MASS’
以下对象屏蔽了来自‘package:dplyr’的同名对象:
select
这个提示的意思是:你在加载MASS包之前,已经先加载了dplyr包,两个包都包含名为select的函数。R的函数搜索路径遵循后加载优先的规则,现在MASS的select函数会覆盖之前dplyr的select函数在全局环境的调用优先级,后续你直接写select()执行代码时,默认调用的是MASS包的同名函数,而非你原本可能预期的dplyr的select函数。
同名函数冲突的处理方法
- 指定函数所属包调用
这是最稳定无歧义的处理方案,不管包的加载顺序是什么,只要在函数名前加上包名和两个冒号,就能明确调用指定包的函数:需要调用dplyr的select就写dplyr::select(),需要调用MASS的select就写MASS::select()。 - 调整包加载顺序
如果你的代码中只会用到其中一个包的同名函数,可以把常用的那个包放在后面加载。比如你大部分场景都要用dplyr的select,就先写library(MASS),再写library(dplyr),这样后加载的dplyr的select会屏蔽MASS的版本,直接调用select()时默认就是dplyr的函数。 - 固定导入指定函数
如果你不需要使用某个包的全部功能,只需要用到它的少数函数,可以单独把需要的函数绑定到全局环境,比如运行select <- dplyr::select,之后直接调用select()就固定为dplyr的版本,不会被后续加载的其他包的同名函数覆盖。 - 使用conflicted包管理冲突
如果经常遇到多包函数冲突问题,可以安装加载conflicted包,通过规则配置统一指定冲突函数的优先调用包,比如运行conflict_prefer("select", "dplyr")后,后续所有直接调用select()的场景都会默认使用dplyr的版本,出现未配置的冲突时R也会主动抛出明确提示,避免误调用。
内容的提问来源于stack exchange,提问作者Khumbudzo Ashley Daswa
相关产品推荐
相关产品推荐

