r - 暂时覆盖函数

标签 r methods

我想在我的包中提供一个名为“Sdt”的函数。它有多种方法,但它们都导致 Sdt.default(a, b, c, d),它返回一个命名向量,其中包含 a、b、c 和 d 的一些计算内容。

但在某些情况下,我的包的用户需要扩展 Sdt.default,例如,如果他/她想用这四个变量尝试一些其他计算。

于是我想:为什么不暂时覆盖函数呢?所以我尝试了这样的事情(当然是 Sdt,但这是一个更好的玩具示例):

a <- function() print("FUNCTION A CALLED")
b <- function() print("FUNCTION B CALLED")
c <- function() a()
d <- function(){

  a()
  a <- b
  a()

  c()
}
d()

结果是这样的

[1] "FUNCTION A CALLED"
[1] "FUNCTION B CALLED"
[1] "FUNCTION A CALLED"

但我想拥有

[1] "FUNCTION A CALLED"
[1] "FUNCTION B CALLED"
[1] "FUNCTION B CALLED"

“<<-”运算符在这个例子中可以工作,但是如果 a() 是在一个包中定义的,它会抛出错误消息,(“包中的确定函数不能被改变”或类似的东西)

长话短说 如何从全局环境中临时但完整地覆盖包中的函数,以便所有后续调用和嵌套调用都使用更改后的函数?

最佳答案

我是@DavidArenburg 解决方案的粉丝,但如果为您想要临时覆盖的所有变量定义默认参数不是一个选项,这是另一种方式:

d <- function(){
  a()
  a <- b
  a()
  environment(c) <- environment()
  c()
}
d()
# [1] "FUNCTION A CALLED"
# [1] "FUNCTION B CALLED"
# [1] "FUNCTION B CALLED"
c()
# [1] "FUNCTION A CALLED"

关于r - 暂时覆盖函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698211/

相关文章:

Flash游戏骇客,得分是49700?如何提高Flash游戏的安全性?

java - 我将如何找到最接近指定日期的日期? ( java )

java - 动态类加载时运行时注释扫描

r - 如何将 R 中的 t.test 结果保存到 txt 文件?

r - 将变量定义为范围

r - 在 R 中执行 := by group in a data. 表时如何更改目标列的类型?

当存在多个重复列时,删除表中的重复列

java - 在 Java 中调用多个方法

java - 为什么 Java 会更新多个具有相同值的变量?

r - 我应该如何选择如何使用 R 打印?