我需要修改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
所以,我的问题是,有没有办法将原始包中的所有对象传递到我修改过的函数中?
提前感谢您的帮助。
答案 0 :(得分:2)
您可以将替换函数的环境设置为包的命名空间。这样,“内部”功能应解析为原始包中已存在的功能。
假设CS.prepMOD
是您的替代功能,请尝试
environment( CS.prepMOD ) <- getNamespace("ResistanceGA")