RStudio中MASS与dplyr包冲突,detach()卸载MASS失败求助
我太懂这个头疼的状况了——MASS包的select()硬生生把dplyr的同名函数给屏蔽了,想卸载MASS还被一堆依赖包绊住,连knit都卡壳了。别慌,这几个实用方案能帮你搞定:
直接用命名空间指定调用dplyr的select:这是最省心的解决方案,完全绕开冲突问题。不管MASS有没有加载,只要你在调用时明确写上
dplyr::select(),就一定会触发dplyr版本的函数。比如你要筛选age和bwt列,代码就写成:processed_data <- dplyr::select(processed_data, age, bwt)这个方法不需要折腾卸载或 detach 操作,稳定性拉满。
暂时移除MASS的搜索路径(而非卸载):你之前用
detach("package:MASS", unload = TRUE)报错,是因为unload = TRUE会尝试卸载整个MASS命名空间,但它被pbkrtest、car、lme4这些包依赖着。试试不带卸载参数的detach:detach("package:MASS")这样只是把MASS从当前搜索路径中移除,它的命名空间仍会留在后台供依赖包使用,同时dplyr的
select()就会恢复优先调用权。如果之后还需要用MASS里的内容(比如birthwt数据集),直接用MASS::birthwt指定调用即可。调整包的加载顺序:如果是先加载dplyr再加载MASS导致的冲突,试试反过来操作——先加载MASS,再加载dplyr。后加载的包的同名函数会覆盖先加载的,这样dplyr的
select()就会成为默认调用版本。不过这个方法不如前两个稳妥,万一后续加载其他包又引发新冲突,还是命名空间调用更可靠。
如果你已经写完了所有分析代码,只是knit时出问题,只需要把代码里所有用到select()的地方替换成dplyr::select(),就能确保knit过程顺利运行。
内容的提问来源于stack exchange,提问作者Angus

