2014-10-31 79 views
0

我試圖寫一個簡單的代碼來計算中位數,但我得到了一個錯誤。 這是我寫使用if/else函數R

位數< -function(x)的{odd.even < -length(x)的%% 2如果(odd.even = = 0)(排序(x)的[長度(X)/ 2] + sort(x)[1 + length(x)/ 2])/ 2 else(sort(x)[ceiling(length(x)/ 2)])}

這是我得到的錯誤

錯誤:意外 '如果' 在 「中值< -function(x)的{odd.even < -length(x)的%% 2如果」

由於

+0

你知道你需要在語句之間使用分號或換行嗎?我開始像@akrun那樣編輯您的代碼格式,但恐怕您的問題可能是由於嘗試將所有這些命令粘貼在同一行上。隨着@ akrun的編輯(並將'odd.even = = 0'改爲'odd.even == 0'),這對我很有用。 – 2014-10-31 14:49:57

回答

1

試試這個(你忘了括號{)

median<-function(x){ 

    odd.even<-length(x)%%2 

    if (odd.even == 0){  
    (sort(x)[length(x)/2]+sort(x)[1+length(x)/2])/2 
    } else { 
    (sort(x)[ceiling(length(x)/2)]) 
    } 

} 

正如指出的,如果你想不使用支架,你總是可以做到這一點,用一個新行的if語句:

median<-function(x){ 
    odd.even<-length(x)%%2 
    if (odd.even == 0) (sort(x)[length(x)/2]+sort(x)[1+length(x)/2])/2 else (sort(x)[ceiling(length(x)/2)]) 
} 

而且最後的回報(x)可能有助於閱讀過程,儘管它不是強制性的。

+0

括號有幫助,但只要「then」子句是單個語句,並且在單獨的行上,則不會有必要... – 2014-10-31 15:09:49

+1

正確。使用支架是一件好事。如果你想使用沒有括號。如果仍然需要從新線開始。 (odd.even == 0)(sort(x)[length(x)/ 2] + sort(x)[1 + length(x) )/ 2])/ 2 else(sort(x)[ceiling(length(x)/ 2)]) 工程 – Romain 2014-10-31 15:26:37

+1

如果您想特別指出,您需要在前面的括號 – rawr 2014-10-31 15:44:18