动态重新定义函数,如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