2017-10-21 235 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)}}