2012-07-19 78 views
0

我在使用的if else裏面功能有問題,我的代碼是這樣的:錯誤使用,如果其他內部功能

ConvertWgtZooLS <- function(WgtZoo, LSWay, Pos){ 
    If(LSWay == 0){ 
     NewWgtZoo <- WgtZoo 
    }else{ 
     BackPos <- BackMatrix(Pos,1) 
     NewWgtZoo<- Ifelse((Sign(WgtZoo) * Sign(BackPos) * LSWay)>=0, WgtZoo, 0) 
    } 
    return(NewWgtZoo) 
} 

然而,當我運行在R,出現錯誤消息:

"Error: unexpected '{' in: 
"ConvertWgtZooLS <- function(WgtZoo, LSWay, Pos){ 
    If(LSWay == 0){" 

我該如何解決這個問題?那裏的語法問題是什麼?我查了很多網站,似乎上面的if else語法是正確的。

非常感謝!

+8

在你的第一個「if」中,這是一個大寫「I」嗎? R區分大小寫。 – A5C1D2H2I1M1N2O1R2T1 2012-07-19 07:18:13

+0

哦,是的!好地方!非常感謝! – Joyce 2012-07-19 07:19:44

+0

@mrdwab - 您應該將該評論細化爲答案 – Dason 2012-07-19 07:23:17

回答

4

代碼中的錯誤是,您使用了If而不是if,而R區分大小寫。因此,可能會有另一個名爲If的函數執行與if不同的操作,正如@danielkullmann所指出的,該函數正是R所尋找的。

R產生的錯誤信息並不總是最有幫助的,但在這種情況下,它確實是指向非常接近問題區域。它會告訴你它在哪裏「困惑」,但這取決於你找出原因!

修復第一個問題後,您會在第6行找到另一個(出於同樣的原因),其中您寫入了Ifelse而不是ifelse

最後一點:R是非常適合空白的,所以最好在代碼中留一些空間來提高可讀性,特別是使用ifelse語句。這裏的原因:

  1. 我覺得if (LSWay == 0) {更容易比if(LSWay == 0){
  2. 閱讀使用的實際功能,如sum(x),你通常會添加一個空格,使得它更容易發現大塊這些條件語句的代碼。

Google R Style Guide在這方面是一個有趣的閱讀。

+0

感謝所有偉大的答案 – Joyce 2012-07-19 13:41:03

+0

@Joyce,沒問題。如果它適合你,請務必[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – A5C1D2H2I1M1N2O1R2T1 2012-07-19 14:45:31