4

我在 R 会话中做了一些愚蠢的事情。我写

打印 = 假

现在我不能打印东西了!

打印 [1] 错误

我该如何取回它?

4

3 回答 3

10

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>
于 2012-06-18T13:34:27.090 回答
8

具有讽刺意味的是,您没有覆盖它。您创建了一个名为“print”的数据对象,当您print在控制台输入时,eval-print 循环接管并返回它。如果您通过键入正确测试了 print 的行为,print("something")或者print(42)您会看到解释器仍然能够找到print.default基本命名空间中的函数。定义与现有函数同名的数据对象是不好的做法,不是因为它们在 R 解释器中覆盖,而是因为它们在用户的脑海中覆盖。解释器通过查看是否存在表示函数调用的左括号来确定您的意图(好吧,它决定了它将做什么)。如果字母 print 后跟“(”,则解释器查看参数的类并分派适当的 print 方法。

于 2012-06-18T13:43:00.830 回答
3

从命名空间取回

print = base::print
于 2012-06-18T13:33:58.867 回答