如何避免用户定义函数的名称空间歧义

时间:2019-04-13 06:01:06

标签: r

可以通过将包名称放在函数调用之前(例如dplyr::left_joinplyr::left_join等)来避免来自库的函数发生命名空间冲突的潜在歧义,如here所述

如何为用户定义的功能实现这种明确性? (即不是来自库/软件包的库)。显然,如果函数名称不是来自软件包,则不能在软件包名称前添加

示例

library(dplyr)
left_join <- function(x, y) { x + y }

dplyr::left_join(x,y) # Unambiguously calls left_join from dplyr
left_join(x, y) # Not clear whether from dplyr or user defined

如何明确调用用户定义的函数?

1 个答案:

答案 0 :(得分:0)

这是我编写的虚拟函数。我尚未对其进行严格的测试,因此可能会损坏:

import_from_global<-function(what,...){
  func<-get(what,envir=.GlobalEnv) 
  do.call(func,list(...))
}

测试:

select<-function(){
  cat("using namespace .GlobalEnv\n") 
  print("Does nothing")
}
import_from_global("select")

结果:

using namespace .GlobalEnv
[1] "Does nothing"