16

一些背景:

我必须经常使用HMR包中HMR的功能。不幸的是,这个功能很慢。(HMR本质上是一个拟合函数,它被设计为尽可能健壮,这是效率低下的一个原因。)函数HMR调用函数HMR::.HMR.fit1,它进行实际拟合。使用Rprof我知道关于效率的主要问题是使用lsfit,这被称为很多。因此,我修改了 的代码,.HMR.fit1直接调用了 使用的 C 函数,lsfit而没有 的所有开销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,但我希望有更方便的解决方案。

4

2 回答 2

18

尝试

?assignInNamespace

用您的版本替换包.HMR.fit1中的内容。HMR

可能的重复:

如何覆盖包命名空间中的不可见函数?

于 2012-08-29T13:26:42.477 回答
8

对于快速测试,您可以使用trace函数 withedit=TRUE来修改函数,这将在适当的命名空间中进行替换,还允许您使用untrace将函数恢复为原始函数。这些更改不会持续到当前会话之后。

于 2012-08-29T14:41:10.697 回答