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

但是,在您修复它之后,您仍然会遇到问题。第二次通过循环,i是 2 和position是 2。这意味着那tabetest[i + position, "Date"]NA因为position + i == 4,但只有 3 行data.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 回答