R-如何建立基础;“合并”;函数为默认函数

R-如何建立基础;“合并”;函数为默认函数,r,merge,R,Merge,我是个新手,如果我的问题很简单,我道歉。 我有许多使用基本合并函数的R脚本。昨天,我不得不安装配置库,这完全破坏了合并函数,因为它也是在congif中定义的。 我读了这篇有用的帖子: 但我这里的问题不同。 我无法遍历数十个R脚本并将“merge()”替换为“base::merge()” 所以我非常简单的问题如下,与这里讨论的非常相似: 如何指定使用函数“merge()”的“base::”版本作为默认版本? 或者-有没有办法不安装配置包中包含的“merge()”函数? 非常感谢的公认答案指示用户

我是个新手,如果我的问题很简单,我道歉。 我有许多使用基本合并函数的R脚本。昨天,我不得不安装配置库,这完全破坏了合并函数,因为它也是在congif中定义的。 我读了这篇有用的帖子: 但我这里的问题不同。 我无法遍历数十个R脚本并将“merge()”替换为“base::merge()”

所以我非常简单的问题如下,与这里讨论的非常相似:

如何指定使用函数“merge()”的“base::”版本作为默认版本? 或者-有没有办法不安装配置包中包含的“merge()”函数? 非常感谢

的公认答案指示用户将
config
包中的函数显式引用为
config::merge()
config::get()

解决
config
屏蔽
base::merge()
问题的另一种方法是加载
config
包,使用它配置环境,然后使用
detach()
删除包。这将取消屏蔽
base::merge()

此时,我们可以通过打印
merge()
函数来显示
config::merge
是默认值

> merge
function (base_config, merge_config) 
{
    merge_lists(base_config, merge_config, recursive = TRUE)
}
<bytecode: 0x7fcddf5de488>
<environment: namespace:config>
>
为了演示这一点,我们将再次打印
merge()
函数

> detach(package:config)
> # print merge function to show it is from base package 
> merge
function (x, y, ...) 
UseMethod("merge")
<bytecode: 0x7fcde7c08e70>
<environment: namespace:base>
> 
>分离(包:config)
>#打印合并函数以显示它来自基本包
>合并
函数(x,y,…)
使用方法(“合并”)
> 

如果您只使用config中的几个函数,最好不要加载它,而是使用“config::function_name()”显式调用函数。第二个链接问题的公认答案似乎提供了另一种解决方案,在
库(config)
do
merge之后,10个脚本似乎并不多。你可以在不到10分钟内完成一个全局查找/替换。你们是对的,查找/替换不是什么大问题,但我很害怕,因为在服务器上我们有数百个甚至更多的R脚本,所以我不想替换其他人的代码。由于使用了分离功能,Len在下面发布的解决方案实际上解决了我的具体问题。非常感谢你的帮助。谢谢你,莱恩,你是对的,如果我在使用它之后分离它,那么merge()就不会被config中定义的merge函数“屏蔽”。非常非常有用。感谢you@Angelo-不客气,安吉洛。我对的回答说明了如何在全局环境和最近加载的包的环境之间插入包。由于
base
环境在环境搜索路径中排在倒数第二位,因此在R会话中加载的任何包如果包含与
base
中的函数同名的函数,都会屏蔽
base
中的函数。
detach(package:config)
# at this point base::merge() and base::get() are unmasked
> detach(package:config)
> # print merge function to show it is from base package 
> merge
function (x, y, ...) 
UseMethod("merge")
<bytecode: 0x7fcde7c08e70>
<environment: namespace:base>
>