在R中,我重写了一个函数,如何将其恢复?
我在一次训练中做了些傻事。我写 打印=假 现在我不能打印东西了 印刷品 [1] 假的在R中,我重写了一个函数,如何将其恢复?,r,R,我在一次训练中做了些傻事。我写 打印=假 现在我不能打印东西了 印刷品 [1] 假的 如何取回它?从名称空间取回它 print = base::print rm不会删除基本对象,因此您只需运行: rm(print) 有趣的是,您可以打印东西: > print <- FALSE > print [1] FALSE > print("hi") [1] "hi" > rm(print) > print("hi") [1] "hi" > print func
如何取回它?从名称空间取回它
print = base::print
rm
不会删除基本对象,因此您只需运行:
rm(print)
有趣的是,您可以打印东西:
> print <- FALSE
> print
[1] FALSE
> print("hi")
[1] "hi"
> rm(print)
> print("hi")
[1] "hi"
> print
function (x, ...)
UseMethod("print")
<bytecode: 0x2a3a148>
<environment: namespace:base>
>打印
[1] 假的
>打印(“hi”)
[1] “嗨”
>rm(打印)
>打印(“hi”)
[1] “嗨”
>印刷品
函数(x,…)
使用方法(“打印”)
讽刺的是,您没有覆盖它。您创建了一个名为“print”的数据对象,当您在控制台上键入print
时,eval print循环接管并返回它。如果您通过键入print(“某物”)
或print(42)
正确测试了打印行为,您会发现解释器仍然能够在基本命名空间中找到print.default
函数。用与现有函数相同的名称定义数据对象是不好的做法,不是因为它们在R解释器中覆盖,而是因为它们在用户的头脑中覆盖。解释器通过查看是否有表示函数调用的开括号来确定您的意图(好吧,它决定了它将做什么)。如果字母p-r-i-n-t后跟“(“那么解释器会查看参数的类并发送适当的打印方法。这会在全局环境中创建一个不必要的base::print
。最好只删除您创建的print
对象(正如@gsk在回答中建议的那样)。它从不在base:NAMESPACE中。要弄乱基函数需要更多的编程暴力。