【发布时间】:2012-08-24 02:47:21
【问题描述】:
一些背景:
我必须经常使用包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的代码,但希望有更方便的解决方案。
【问题讨论】: