1

私はRを初めて使用し、コーディングしたいループ内のテストに問題があります。次のようなデータフレーム(tabetest)を使用します。

    Date    25179M103
1   14977   77.7309
2   14978   77.2567
3   14979   77.7507

私は持っています:

> if (tabetest[3,"Date"] - tabetest[1,"Date"] > 1){ print("ok") }

[1] "ok"

だが:

j = 1 
position = 1
price = tabetest

for (i in 1:nrow(tabetest) - position){
   if (tabetest[i + position,"Date"] - tabetest[position,"Date"] > 20{
       price[i + position,j] = price[i + position,j] / price[position,j] - 1}
       position = position + 1
   }

エラーを返します。Rは、次の場合にtrue/falseが必要な値が欠落していることを示しています。

 if (tabetest[i + position, "Date"] - tabetest[position, "Date"] >

私はそのエラーにかなりの時間を費やしましたが、それがどこから来ているのかまだわかりません。

4

1 に答える 1

4

まず、操作順序の問題があります。括弧で囲む必要がありますnrow(tabetest)-position

以下は同じc(1, 2, 3) - 1

> 1:3-1
[1] 0 1 2

しかし、これはc(1, 2)

> 1:(3-1)
[1] 1 2

ただし、それを修正した後も問題が発生します。ループの 2 回目iは 2 であり、position2です。tabetest[i + position, "Date"]NAposition + i == 4data.frame

これはほとんど推測ですが、ステートメントpositionの条件が次のような場合にのみインクリメントしたい場合があります。ifTRUE

for (i in 1:(nrow(tabetest)-position)){
    if(tabetest[i+position,"Date"]-tabetest[position,"Date"]>20){
        price[i+position,j]=price[i+position,j]/price[position,j]-1
        position=position+1
    }
}
于 2012-06-17T21:22:06.077 に答える