在R中避免函数名称冲突

10
我最近遇到一个问题,现有的R代码因引入dplyr库而破损。具体来说,stats包中的lag函数将被dplyr::lag取代。这个问题之前已经在此处here进行了记录,但是没有提供解决方案。对R命名空间和环境进行的研究得出2种可能的解决方案,在我看来都不太健壮:
  1. 确保package:statssearch()路径中首先出现,这样lag就会解析成stats包中的函数。
  2. 在我的代码中更改所有lag的引用为stats::lag
我的问题是是否有其他解决方案:
  1. 以一种强制使其成为“私有”命名空间的方式加载dplyr包,其中它的对象只能通过::操作符访问。
  2. 在库加载时使用指令强制lag解析为stats::lag。这可以通过删除或覆盖搜索路径(类似于C++的using namespace::function指令)来完成。

7
我相信“将我的代码中所有关于滞后的引用更改为stats :: lag”或多或少是官方建议,这就是我在这里所发的挖苦话。[链接](https://twitter.com/joranelias/status/676879776502579200) - joran
4
确保 lag 指的是 stats::lag 的一种非常简单的方法是,只需执行 lag <- stats::lag。全局环境优先于包命名空间出现在搜索路径中。 - Gregor Thomas
谢谢,@Gregor。我尝试过类似的东西,但是把它搞得比实际上更困难了,并且语法也错了。仍然觉得应该有比那更强大的解决方案,但我会把它作为备选方案。 - mjreed
@Gregor 的建议非常棒,特别是因为(我相信)它可以很好地与 .Rprofile 中的相应条目配合使用。 - Maxim.K
1个回答

5

如果你遇到这个问题,应该考虑使用library(conflicted),因为它正是为了解决这个问题而设计的。
https://cran.r-project.org/web/packages/conflicted/index.html

在加载包后加入conflicted::conflict_prefer(name = "lag", winner = "stats")能确保在任何时候调用lag()函数时,默认使用stats函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接