假设我们有以下功能:
foo <- function(x)
{
line1 <- x
line2 <- 0
line3 <- line1 + line2
return(line3)
}
Run Code Online (Sandbox Code Playgroud)
我们想要改变第二行:
line2 <- 2
Run Code Online (Sandbox Code Playgroud)
你会怎么做?
一种方法是使用
fix(foo)
Run Code Online (Sandbox Code Playgroud)
并改变功能.
另一种方法是再次编写该函数.
还有另外一种方法吗?(记住,任务是改变第二行)
我想要的是某种方式将函数表示为字符串向量(好吧,字符),然后更改其中一个值,然后再将其转换为函数.
一些背景:
我必须经常使用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
Run Code Online (Sandbox Code Playgroud)
但是,HMR::.HMR.fit1这样做不会改变,显然HMR::HMR不会使用我修改过的拟合函数.有没有办法实现我想要的,而无需从源代码构建软件包,由于我的(Windows)计算机上的用户权限限制,我无法做到这一点?
现在,我的解决方案是复制代码HMR::HMR,但我希望有一个更方便的解决方案.
有没有一种简单的方法可以自动删除
\begin{tabular}{@{\extracolsep{5pt}}lc}
Run Code Online (Sandbox Code Playgroud)
和
\end{tabular}
Run Code Online (Sandbox Code Playgroud)
Stargazer LaTeX 输出的开头和结尾的行?
实际上,我只需要内部的 LaTeX 代码,而从 stargazer 生成的 TeX 文件中手动删除这些行完全是浪费时间......