2012-08-29 36 views
13

的内部函数一些背景资料:更改包装

我不得不使用功能HMR从包HMR了很多。不幸的是,这个功能非常慢。 (HMR本质上是一个拟合函数,它被设计为尽可能健壮,这是缺乏效率的一个原因。)函数HMR调用函数HMR::.HMR.fit1,它进行实际拟合。 使用Rprof我知道关于效率的主要问题是使用lsfit,这被称为很多。因此,我修改了.HMR.fit1的代码,直接调用lsfit使用的C函数,而没有lsfit的所有开销,这应该导致显着的速度增益。

现在我想用我的修改函数替代HMR::.HMR.fit1,如果测试结果相同,测试HMR我得到的速度也是多少。

我试着这样做:

mod.fun <- function(<many args>) { 
<a lot of code> 
} 
environment(mod.fun) <- environment(.HMR.fit1) 
.HMR.fit1 <- mod.fun 

然而,HMR::.HMR.fit1不这样做改变了,显然HMR::HMR不使用我修改的拟合函数。有没有一种方法可以实现我想要的功能,而无需从源代码构建软件包,但由于我的(Windows)计算机上的用户权限限制,我无法做到这一点?

现在,我的解决方案是复制HMR::HMR的代码,但我希望有一个更方便的解决方案。

回答

6

对于一个快速测试,你可以使用trace功能与edit=TRUE修改的功能,这将做正确的命名空间的替代,也允许您使用untrace将功能恢复为原始状态。这些变化不会超出当前会议的范围。