2012-01-03 4 views
2

の場合、オブジェクトのIF比較を行うことができません。数値と数値を比較すると、IFが機能します(例:if (c1 < c2){do something}if (c1 < 0){do something}が失敗します。文がR

これはエラーを表示しているコードです。HighValuesは数字のリストで、LowValueは数字のリストです。私は間違って比較しているのですか?

checkHS<-function(HighValues,LowValues) 
{ 
    counter<-1 
    patternList<-c() 

    while(counter < length(HighValues)) 
    { 
    cmpValue1<- 0.15*HighValues[[counter]] 
    cmpValue2<- HighValues[[counter+1]] 
    if(cmpValue1<cmpValue2) 
    patternList<-c(patternList,counter) 
    counter<-counter+1 

    } 
    return (patternList) 
} 

私は間違っていますか?

編集:わかりやすくするために、関数に渡すデータセットを追加してください。

HighValues<-c(1:100)

LowValues<-c(2:101)

+1

HighValuesオブジェクトのタイプは何ですか?なぜLowValuesを渡しているのですか?条件付きで、または毎回カウンタを増やしたいですか?それは意図の点で非常に不明瞭なコードです...ところで、あなたのサンプル行は正常に動作するはずです... "動作しません"とはどういう意味ですか? c1とc2を何かに設定すると、行はそれらの行為を行います。一度これをクリアすると、Rコードで何かのように見えない良い応答が得られるはずです。あなたがやっているやり方は非常に非効率的で、Rのようなものではありません。 – John

+0

HighValuesオブジェクトはリストタイプのもので、条件に関係なく毎回カウンターが増加します。LowValuesは2番目のIf条件であり、ここで追加していない場合、上記のコードは** True/False not foundエラー**を生成します。私はc1とc2を設定しようとしましたが、動作しません。私はまだなぜか不思議です。 –

+0

関数に渡すデータの種類の小さな例を投稿できますか? –

答えて

2

私はあなたが提供したデータと機能を実行すると、それはそれが必要値だけ返す、文句なしで完了と評価されます

head(checkHS(HighValues=HighValues, LowValues=LowValues)) 
[1] 1 2 3 4 5 6 

次のコードがない、と述べましたあなたが投稿した機能と同じこと。これは、Rの計算を 'ベクトル化'する機能を利用しているため、より表現力豊かで読みやすいコードになります。

checkHS2 <- function(HighValues,LowValues) { 
    cmpValue1 <- 0.15*HighValues[-length(HighValues)] 
    cmpValue2 <- HighValues[-1] 
    which(cmpValue1 < cmpValue2) 
} 
+0

ありがとうございました、道を分かりました。しかし、間違いなくロジックの使用は明らかにしました。 もう一度ありがとうございます。 –

-2

「あなたは結果として何を期待していますか?」

私はあなたのコードを実行したとき、私はそれの中にエラーが見つかりませんでした、関数は値を返しています。

+0

true/falseが返されます。 –