2017-10-21 13 views
1

このコードを1行ずつ実行すると動作しますが、コード全体を実行するとエラーになります。 私はここでやろうとしていることである
ifelse(<指揮>、{はい、ifelse(<指揮>、{YES、NO})}、なし)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

本当の 'if'-' 'else'ブロックを使いたいと思うようです。概念の合理的な紹介のようなものについては、このページを参照してください:https://www.programiz.com/r-programming/if-else-statement –

+0

@NickNimchukちょっと、実際のif-elseブロックの使い方以前は本当のif-elseブロックが複数のネストされたif文を連鎖していなかったのでifelse()を使用しましたが、おそらく私は間違いを犯しました。 – kys92

答えて

1

私はこの問題がyesno引数の割り当てがifelse()だったと思います。この関数は、引数の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)}}