Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中,我重写了一个函数,如何将其恢复?_R - Fatal编程技术网

在R中,我重写了一个函数,如何将其恢复?

在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

我在一次训练中做了些傻事。我写

打印=假

现在我不能打印东西了

印刷品 [1] 假的


如何取回它?

从名称空间取回它

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中。要弄乱基函数需要更多的编程暴力。