I recently discovered您可以用if-else塊有條件地賦值。從if-else塊分配值(它是如何工作的?)
y <- if(condition) 1 else 2
我意識到,使用情況,這是有限的:如果你已經矢量化的代碼,你可以使用ifelse
函數。有一個性能優勢:if-else
比我的機器上的標量案例中的ifelse
運行速度快35倍(儘管您需要調用它幾百萬次才能注意到其中的很大不同)。
什麼是我的問題是,我不知道爲什麼這段代碼工作—我很驚訝,它不只是拋出一個錯誤。
另一個例子表明,如果塊的功能類似於函數—,它們會自動返回塊中的最後一個值(儘管在它們中不能使用return
語句)。
y <- if(TRUE)
{
y <- 3
4
} # y is 4
在此基礎上,我猜,也許當你如果塊輸入了另一個環境中創建的,但是這似乎並不如此。
if(TRUE) sys.frames() # NULL
有誰能告訴我發生了什麼問題嗎?
也許我過(或下)認爲這,我們可以把它歸結爲非常聰明的解析。爲了記錄,當你在MATLAB中嘗試這樣的事情時,你會得到一個錯誤:'如果'非法使用保留關鍵字'。' – 2009-12-02 17:10:10
雖然R不是MATLAB,但沒有理由要遵循MATLAB的規則。這裏,if塊中最後一條語句的值被賦值給y。這個聲明是標量4. – Sharpie 2009-12-02 17:25:03
Python也會中斷,就像C#一樣(儘管您可以使用'?'運算符,正如Ken指出的那樣)。我認爲關鍵的一點是,在作出分配之前,聲明的右側被視爲表達式並評估**。 – 2009-12-02 18:34:16