2016-03-07 49 views
0

主要问题如何在执行`+`=`-`后进行“回滚”?

我做

> `+` = `-` 
> 5 + 2 
[1] 3 

我怎样才能 “回退”,无需重新启动控制台?这样做

> `+` = sum 
当然

,恢复的+但不是所有的一个功能。例如

> c(3,4) + c(1,2) 
[1] 10 

如何恢复+的其他功能?

额外的相关问题

是否有一个名字为这个“种分配”还是那种功能的“+”和“ - ”代表什么?

什么术语可以用来区分功能“+”从功能“%+%”,人们可以创建做

`%+%` = function(x,y){print(paste(x,"+",y,"=",x+y))} 
+0

多么奇怪的问题。似乎很明显,你应该删除@ Gregor的建议和''rm('+')'' - 也许你可以澄清你的目标是什么?你到底想做什么? – MichaelChirico

+0

我只是试图提高我对'R'的理解。这个问题背后没有应用。我不知道'rm('+')',我也不能预测它会恢复基本功能。 –

回答

6

rm()将删除您的工作空间中的对象。

rm(`+`) 

将删除您的自定义蒙版内置函数。

你所做的任务没有什么特别之处。正如nrussell指出的那样,中缀运算符(又名二元运算符)通常可以通过用百分号包装来定义。基本的数学一(+-*/^,甚至=<-和逻辑运算符,==|||&&&<等)在那个特殊的解析器知道他们的二元运算符即使没有被包裹在%。你可以看到?Arithmetic(别名?"+")和?base::Ops了解更多详情。

+0

非常感谢+1。是否将'='和'<-'视为数学(二元)运算符? –

+0

他们都有两个论点,一个在左边,一个在右边。你可以用“标准”的形式称呼它们,例如'“< - (x,1)”。无论你认为他们是“数学”运算符,它们肯定是二进制/中缀运算符,与'+'或'*'相同。 – Gregor

+1

''[''也有特殊的语法,可以作为一个普通函数调用。我不把它列入这个列表中,因为它不是一个二进制/中缀运算符,因为它可以并且经常死亡需要更多参数,''[“(mtcars,4:5,1:3)''。它的特殊语法不是'object operator object'的形式。另一个特殊的是'!',它是一元的,而不是二元的(它只需要一个参数),但也有特殊的语法。 – Gregor

4

您可以通过重新分配完全限定的功能覆盖此:

`+` = `-` 
5 + 2 
#[1] 3 

`+` <- base::`+` 
5 + 2 
#[1] 7 

它可能会更好,只是rm新功能虽然,因为格雷戈尔建议,否则,你只会有多余的物体漂浮在你的环境中不必要的。


函数,如+-*,等等,甚至%+%被称为中缀运算符。不同之处在于前者是内置在R语言中的(它们是原语),因此不需要封装在% %中以避免生成解析错误。