This question already has an answer here:
How do I override a non-visible function in the package namespace?
(1个答案)
7年前关闭。
一些背景:
我必须大量使用软件包
使用
现在,我想用修改后的函数替换
我试图这样做:
但是,
现在,我的解决方案是复制
用您的版本替换
可能重复的:
How do I override a non-visible function in the package namespace?
(1个答案)
7年前关闭。
一些背景:
我必须大量使用软件包
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
的代码,但我希望有一个更方便的解决方案。 最佳答案
尝试
?assignInNamespace
用您的版本替换
.HMR.fit1
包中的HMR
。可能重复的:
How do I override a non-visible function in the package namespace?
关于r - 更改包的内部功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12178830/
10-12 19:22