我在 R 会话中做了一些愚蠢的事情。我写
打印 = 假
现在我不能打印东西了!
打印 [1] 错误
我该如何取回它?
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>
具有讽刺意味的是,您没有覆盖它。您创建了一个名为“print”的数据对象,当您print
在控制台输入时,eval-print 循环接管并返回它。如果您通过键入正确测试了 print 的行为,print("something")
或者print(42)
您会看到解释器仍然能够找到print.default
基本命名空间中的函数。定义与现有函数同名的数据对象是不好的做法,不是因为它们在 R 解释器中覆盖,而是因为它们在用户的脑海中覆盖。解释器通过查看是否存在表示函数调用的左括号来确定您的意图(好吧,它决定了它将做什么)。如果字母 print 后跟“(”,则解释器查看参数的类并分派适当的 print 方法。
从命名空间取回
print = base::print