2016-11-26 3 views
-1

:私はここに条件が簡単にできませんでしたと思いますなぜこの/ ifエラーはスクリプトで表示されますがコンソールでは表示されませんか?コードのこの部分で

Error in if (x[1] > 50) { : missing value where TRUE/FALSE needed 

と私はいくつかのRが欠落している必要があります。q7 (c(10,20,30,40,50,60,70,80,90,100))として例えば使用さ

q7 <- function (x) { 
    if (is.numeric (x) == FALSE) {stop ("Input is non-numeric.")} 
    if (all (x > 0) == FALSE) {stop ("Input has negative values.")} 
    sum <- 0 
    while (sum <= 100) { 
    if (x[1] > 50) {next} 
    else if (x[1] %% 2 == 0) {sum <- sum + (x[1]/2)} 
    else {sum <- sum + x[1]} 
    x <- x [x[2]:length (x)] 
    } 
} 

は、私はこのエラーを取得しますヒューリスティックであることは明らかです。

> x <- c(10,20,30,40,50,60,70,80,90,100) 
> x[1] > 50 
[1] FALSE 

とても単純です。
何が起こっていますか?

debug
+0

すべての反復で 'x'の最初の値を省略したいのですが、すべてのことを混乱させない方法がありますか? –

+0

もちろん、これは私には分かりませんでした。ありがとうございました! –

答えて

0

と迅速診断は、問題は、これがNAのベクトルとなり、最初の反復後

x <- x[x[2]:length(x)] 

であることを示しています。次に、次の反復で、x[1] > 50をチェックすると、実際にはNA > 50となっているので、エラーが発生します。

ご確認の上、最初の値xを削除してください。だからなぜ使用しないでください

x <- x[-1] 
0

x [2]をちょうど2に変更するとします。そのためxから[1] = 60以降、それはwhileループ(永遠に)の次の反復に移動し続けるので、あなたは、無限ループになってしまいます「次へ」の文の

x <- x [2:length (x)] 

。たぶんあなたは '休憩'を使いたいと思っていました。

関連する問題