2016-10-29 14 views
0

範囲のうち6と3の倍数、またはどれも含まれていない数値をテストする関数を作成しました。私はそれがしたいよう入力が文字列のときにR関数のエラーが発生する

Multi <- function(x,y) { 
z = x:y 
for (i in z) { 
    if (i%%1!=0 | i<0) { 
    print("Error!") 
    break 
} else if (i%%3==0 & i%%6==0) { 
    print(paste(i, "is multiple of both 3 and 6")) 
} else if (i%%3==0) { 
    print(paste(i, "is multiple of 3")) 
} else { 
    print(paste(i, "is not multiple")) 
    } 
} 
} 

ループは動作しますが、if文最初の内、私はまた、文字/文字列が提供されている場合、それは"Error!"を印刷したいと思います。 Multi("Hello",10)をしようとしたときに私が得るメッセージは次のとおりです。

Error in x:y : NA/NaN argument In addition: Warning message: In Multi("Hello", 10) : NAs introduced by coercion

私はsuppressWarnings()機能を試してみましたが、私はそれを動作させることができませんでした。

提案がありますか?

+0

コードを減らすことができますか? – biomiha

答えて

0

はこれを試してみてください:

Multi <- function(x,y) { 
    if (!is.numeric(x) | !is.numeric(y)) { 
    print("Error!") 
    } else { 
    z = x:y 
    for (i in z) { 
     if (i%%1!=0 | i<0) { 
     print("Error!") 
     break 
     } else if (i%%3==0 & i%%6==0) { 
     print(paste(i, "is multiple of both 3 and 6")) 
     } else if (i%%3==0) { 
     print(paste(i, "is multiple of 3")) 
     } else { 
     print(paste(i, "is not multiple")) 
     } 
    } 
    } 
} 
Multi(1,10) 
Multi('Hello', 10) # now it will print Error without a NaN: 'Hello':10 was causing this NaN 

`の代わりに` is.numeric(C(x、y))を使用しないのはなぜあなたは少しも

sapply(1:10, function(i) ifelse(i%%3==0, 
           ifelse(i%%6==0, 
             paste(i, "is multiple of both 3 and 6"), 
             paste(i, "is multiple of 3")), 
           paste(i, "is not multiple"))) 
+0

ありがとう、それは簡単でした! –

関連する問題