此处列出的其他解决方案可能会解决您的直接问题,但会以严重的方式失败:它们无法提前告诉您未知的冲突。例如,我刚刚更新了一些旧代码,发现我使用的三个包都有一个summarize 命令。
优雅的解决方案是在每个会话/脚本中加载 conflicted 包,因为它:
- 在出现命名空间冲突时生成信息性错误消息
- 提供显式函数
conflict_prefer() 来分配命名空间优先级
- 不需要更繁琐的
package::function() 语法
请参阅下面部分来自https://github.com/r-lib/conflicted的示例代码
# install package
install.packages("conflicted")
# example of how to start load packages at start of your script
library(dplyr)
library(conflicted)
conflict_prefer("select", "dplyr")
conflict_prefer("filter", "dplyr")
下面是一个示例,如果您在开始时运行了library(conflicted),但没有指定哪个包获得filter 的优先级:
# WITHOUT conflict_prefer("filter", "dplyr")
# example of informative error message
filter(mtcars, cyl == 8)
#> Error: [conflicted] `filter` found in 2 packages.
#> Either pick the one you want with `::`
#> * dplyr::filter
#> * stats::filter
#> Or declare a preference with `conflicted_prefer()`
#> * conflict_prefer("filter", "dplyr")
#> * conflict_prefer("filter", "stats")
下面是library(conflicted) 和conflict_prefer("filter", "dplyr") 的示例:
# WITH conflict_prefer("filter", "dplyr") as suggested at top
# R knows to a assign priority
library(conflicted)
conflict_prefer("filter", "dplyr")
filter(mtcars, cyl == 8) %>% head(2)
# mpg cyl disp hp drat wt qsec vs am gear carb
# 1 18.7 8 360.0 175 3.15 3.44 17.02 0 0 3 2
# 2 14.3 8 360.0 245 3.21 3.57 15.84 0 0 3 4