在T O覆盖函数时,我该如何获取它?

时间:2012-06-18 13:32:55

标签: r

我在R会话中做了些蠢事。我写了

  

print = FALSE

现在我无法打印东西!

  

打印   [1]错误

我如何取回它?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:8)

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

答案 2 :(得分:3)

从命名空间中取回

print = base::print