避免 R 中的函数名冲突

mjr*_*eed 7 namespaces r dplyr

我最近遇到了一种情况,由于引入了dplyr库,现有的 R 代码被破坏了。具体来说,lag来自 stats 包的函数正在被dplyr::lag. 该问题先前已在此处记录,但未提供解决方法。对 R 命名空间和环境的研究导致了 2 种可能的解决方案,在我看来都不是很强大:

  1. 确保package:stats首先出现在search()路径中,以便lag解析为 stats 包中的函数。
  2. lag我代码中的所有引用更改为stats::lag

我的问题是这些其他解决方案是否可行:

  1. dplyr以某种方式加载包以强制它位于“私有”命名空间中,在该命名空间中只能通过::操作符访问其对象。
  2. 库加载时强制lag解析为stats::lag. 这可以通过删除dplyr::lag或覆盖搜索路径来完成(类似于 C++ using namespace::function指令。)

小智 5

您应该考虑,library(conflicted)因为它正是针对这个问题而设计的。
https://cran.r-project.org/web/packages/conflicted/index.html

conflicted::conflict_prefer(name = "lag", winner = "stats")在加载包之后放置可确保lag()在脚本中调用该函数时,默认情况下它将使用 stats 函数。