如何使来自不同环境的对象在R中的新函数中可用?

如何使来自不同环境的对象在R中的新函数中可用?,r,R,我需要修改R包中的一个函数以适应我的分析需要。为此,我提取了函数代码,对其进行了修改,并将其保存为一个.R文件,然后将其作为源代码使用。但是,由于此函数使用原始R包中的嵌套函数,因此即使从修改后的函数中加载原始库,它也会给我一个错误: Error in CS.prepMOD(n.POPS = length(sample.locales), response = gen.data[lower.tri(gen.data)], : could not find function "To.From.

我需要修改R包中的一个函数以适应我的分析需要。为此,我提取了函数代码,对其进行了修改,并将其保存为一个.R文件,然后将其作为源代码使用。但是,由于此函数使用原始R包中的嵌套函数,因此即使从修改后的函数中加载原始库,它也会给我一个错误:

Error in CS.prepMOD(n.POPS = length(sample.locales), response = gen.data[lower.tri(gen.data)],  
: could not find function "To.From.ID"
我可以通过指定每个嵌套函数的查找位置来潜在地解决这个问题。例如:

get('To.From.ID',envir=getNamespace('ResistanceGA'))
但是,对每个嵌套函数都这样做太麻烦了。相反,我尝试将修改后的函数源代码添加到原始包环境中,但也出现了一个错误:

source('newCS_prep.R',local=getNamespace('ResistanceGA'))
Error in eval(expr, envir, enclos) : 
cannot add bindings to a locked environment
所以,我的问题是,有没有办法将原始包中的所有对象传递到修改后的函数中


提前感谢您的帮助。

您可以将替换函数的环境设置为包的名称空间。这样,“内部”函数应该解析为原始包中已经存在的函数

假设
CS.prepMOD
是您的替换函数,请尝试

environment( CS.prepMOD ) <- getNamespace("ResistanceGA")
环境(CS.prepMOD)