2017-10-21 217 views
1

當我一行一行地運行這個代碼它的作品,但如果我運行整個代碼塊它給我一個錯誤。 什麼,我想在這裏做的是
ifelse(< COND>,{是的,ifelse(< COND>,{是,否})},否)R調試嵌套的ifelse()語句

ifelse(myfunct(R) >= myfunct(worst_point), 
{IC <- C - 0.5 * (R - C); ifelse(myfunct(IC) < myfunct(worst_point), {points[[which.max(result)]] <- IC}, 
    for (i in 2:(n+1)) {points[[i]] <- best_point + 0.5 * (points[[i]] - best_point)})}, 
    for (i in 2:(n+1)) {points[[i]] <- best_point + 0.5 * (points[[i]] - best_point)}) 

但它給我一個錯誤:

Error in ans[!test & ok] <- rep(no, length.out = length(ans))[!test & : 
    replacement has length zero 
In addition: Warning message: 
In rep(no, length.out = length(ans)) : 
    'x' is NULL so the result will be NULL 

部分,其中其給我的錯誤是for循環內ifelse()語句,我不知道爲什麼,可能有人幫助我理解這個問題?

+0

它看起來像你想要使用一個真正的'如果'''else'塊。看到這個頁面看起來像一個合理的概念介紹:https://www.programiz.com/r-programming/if-else-statement –

+0

@NickNimchuk嘿一些如何使用真正的if-else塊工作,..我使用ifelse(),因爲以前真正的if-else塊沒有通過多個嵌套的if語句鏈接,但也許我犯了一個錯誤..謝謝。 – kys92

回答

1

我認爲問題是在ifelse()的參數yesno參數中的分配。該函數旨在返回與其參數test相同形狀的值。在這裏,我嘗試使用if()else陳述來重寫它,並根據您的評論成功完成此操作。

if(myfunct(R) >= myfunct(worst_point)) { 
    IC <- C - 0.5 * (R - C) 
    if(myfunct(IC) < myfunct(worst_point)) { 
    points[[which.max(result)]] <- IC 
    }else{for (i in 2:(n+1)) { 
       points[[i]] <- best_point + 0.5 * (points[[i]] - best_point) 
       } 
    } 
    }else{for (i in 2:(n+1)) { 
    points[[i]] <- best_point + 0.5 * (points[[i]] - best_point)}}