gpt4 book ai didi

r - 动态重新定义一个函数,比如 print.data.frame

转载 作者:行者123 更新时间:2023-12-02 08:26:34 24 4
gpt4 key购买 nike

  1. 有没有办法重新定义锁定的函数?
  2. 在评估某些代码时动态重新定义此类全局可用函数的最佳方法是什么?

示例:我有以下代码:

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))

编辑:这个问题被问得很糟糕。问题是我用了 <<-重新定义函数。这试图在错误的环境中设置功能。正如@hrbrmstr 在下面指出的那样,可以在全局环境中轻松地重新定义函数。

最佳答案

print.data.frame 未“锁定”(或隐藏)。它出现在 methods("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, ]))

给予:

$speed
[1] 4 4 7 7 8

$dist
[1] 2 10 4 22 16

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

你的其他代码应该在 e1 中正常运行。

关于r - 动态重新定义一个函数,比如 print.data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31703182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com