首页 > 解决方案 > 如何避免用户定义函数的命名空间歧义

问题描述

dplyr::left_join可以通过将包名称添加到函数调用(例如,plyr::left_join等)前面来避免来自库的函数的命名空间冲突的潜在明确性,如此处所述

对于用户定义的函数,如何实现这种明确性?(即不是来自库/包的)。显然,如果函数不是来自包,则不能将包名称附加到函数

例子

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

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

标签: r

解决方案


这是我写的一个虚拟函数。我没有严格测试它,所以它可能会破坏:

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"

推荐阅读