如何在R中的新功能中使用不同环境中的对象?

时间:2015-11-02 22:45:27

标签: 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.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

所以,我的问题是,有没有办法将原始包中的所有对象传递到我修改过的函数中?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

假设CS.prepMOD是您的替代功能,请尝试

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