动态重新定义函数,如print.data.frame 有没有重新定义锁定函数的方法 在评估某些代码时,动态重新定义这样一个全局可用函数的最佳方法是什么

动态重新定义函数,如print.data.frame 有没有重新定义锁定函数的方法 在评估某些代码时,动态重新定义这样一个全局可用函数的最佳方法是什么,r,R,示例:我有以下代码: print(cars[1:5, ]) 这通常调用print.data.frame,但出于任何原因,我希望它调用my.fancy.print.data.frame()。实现这一目标的最佳方式是什么 最后,我想要这样的东西: evalWithEnvir(print(cars[1:5, ]), envir = list(print.data.frame = my.fancy.print.data.frame)) 编辑: 这个问题问得很糟。问题是我使用了您可以在您的环境中使用以

示例:我有以下代码:

print(cars[1:5, ])
这通常调用
print.data.frame
,但出于任何原因,我希望它调用
my.fancy.print.data.frame()
。实现这一目标的最佳方式是什么

最后,我想要这样的东西:

evalWithEnvir(print(cars[1:5, ]), envir = list(print.data.frame = my.fancy.print.data.frame))
编辑:
这个问题问得很糟。问题是我使用了
您可以在您的环境中使用以下工具重新定义
print.data.frame
的功能:

print.data.frame <- function(x, ..., digits = NULL,
      quote = FALSE, right = TRUE, row.names = TRUE) {
  print("WOO HOO")
}

print.data.frame
未“锁定”(或隐藏)。它出现在
方法(“print”)
中,其中也给出了不可见的方法

如果您不想定义特殊的
,可以在定义的环境中覆盖
base::print.data.frame
,并在代码中引用它,例如

e1 <- new.env(parent=.GlobalEnv)
assign("print.data.frame",
       function(x) print((unclass(x))),
       envir=e1)
with(e1, print(cars[1:5, ]))

您的其他代码应该在
e1

中正常运行,我认为当您使用这样的泛型函数时,它会根据对象的属性类调用该方法。例如,通常情况下,如果对象是数据帧,它将调用方法
print.data.frame
,依此类推。实现目标的一种方法是定义一个personal类,然后将该类的方法添加到print(或其他)函数中。@SabDeM我无法控制最终调用
print.data.frame
的代码。在代码中,我可以控制立即调用
my.fancy.print.data.frame
e1 <- new.env(parent=.GlobalEnv)
assign("print.data.frame",
       function(x) print((unclass(x))),
       envir=e1)
with(e1, print(cars[1:5, ]))
$speed
[1] 4 4 7 7 8

$dist
[1]  2 10  4 22 16

attr(,"row.names")
[1] 1 2 3 4 5