r - 如何避免用户定义函数的命名空间歧义
问题描述
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
如何明确地调用用户定义的函数?
解决方案
这是我写的一个虚拟函数。我没有严格测试它,所以它可能会破坏:
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"
推荐阅读
- python - 获取不同列的平均值
- angular - 当一个输入在 Angular 4 或 Angular 6 中成为焦点时,我想隐藏一个 div
- javascript - Angular 7 IE11 不工作。获取 SCRIPT1002 语法错误 vendor.js
- php - 未找到 请求的资源 / 在此服务器上未找到
- postgresql - 在 PostgeSQL 中使用 ENUM 类型而不先定义它
- c# - 如何首先“将字符串拆分为数组”然后“向该数组添加内容”?|| C# 控制台应用程序
- python - Python - 如何在 NLTK 中解析后提取名词短语
- azure - 单个网络作业是否可以同时具有计时器触发功能和手动触发功能
- azure - 是否有任何选项可以为 Azure 仪表板的导出编写脚本?
- angular - 如何确定要在前端显示的角色 - Angular 7