2011-04-21 162 views

回答

11

遞增和遞減由10

require(Hmisc) 
inc(x) <- 10 

dec(x) <- 10 
+0

從版本4.1.0開始,這些函數似乎已從'Hmisc'中移除。 – llasram 2018-03-07 15:13:28

27

R沒有的increment operator一個概念(如例如在++ C)。然而,這並不難自己實現一個,例如:

inc <- function(x) 
{ 
eval.parent(substitute(x <- x + 1)) 
} 

在這種情況下,你會打電話

x <- 10 
inc(x) 

但是,它引入了函數調用的開銷,所以它比打字x <- x + 1你自己。如果我沒有弄錯,引入increment operator可以使編譯器更容易工作,因爲它可以直接將代碼轉換爲機器語言指令。

+1

這個函數不能返回值,然後像postincrement ++那樣增加。它更類似於+ =或preincrement ++。 – Megatron 2015-07-10 18:52:36

11

R沒有這些操作,因爲R中的(大多數)對象是不可變的。他們不會改變。通常,當它看起來像修改對象時,實際上是在修改副本。

+10

儘管不變性對於對象來說是一個很好/令人滿意的屬性(閱讀:減少錯誤),但我認爲不可變性與+ =問題有關。在其他語言中,+ =可以應用於不可變類型(如.net中的字符串)。該操作只需創建一個新對象並將給定變量分配給該新對象。不變性保持不變,變量更新。 – SFun28 2011-04-21 13:35:06

+3

好點。然而,不變性肯定會使這類操作變得不那麼自然。 – hadley 2011-04-22 03:20:58

44

繼@GregaKešpret可以使中綴運算符:

`%+=%` = function(e1,e2) eval.parent(substitute(e1 <- e1 + e2)) 
x = 1 
x %+=% 2 ; x