Получение аргумента имеет длину 0 внутри оператора if

Я пытаюсь рассчитать RSI для ретроспективного периода в 14 дней. В моем файле Excel есть три столбца: ДАТА, ОТКРЫТЬ, ЗАКРЫТЬ. Но когда я проверяю dff›0 внутри оператора if, возникает ошибка — Ошибка в if (dff›0) { : аргумент имеет нулевую длину. Ниже мой код. Любые предложения, почему это происходит?

library(readxl)
data <- read_excel(address of file)
data <- data.frame(data)
rows <- nrow(data)
RSI <- rep(0,rows)
for(i in 14:rows){
  gain <- 0
  cnt_gain <- 0
  cnt_loss <- 0
  loss <- 0
  for(j in i-13:i){
    dff <- data[j,3]-data[j,2]
    if(dff > 0){
      gain <- gain + dff
      cnt_gain <- cnt_gain + 1
    }
    else{
      loss <- loss -dff
      cnt_loss <- cnt_loss + 1
    }
  }
  avg_gain <- gain/cnt_gain
  avg_loss <- loss/cnt_loss
  RSI[i] <- 100 - 100/(1+ avg_gain/avg_loss)
}

person jd_sal    schedule 17.08.2020    source источник
comment
- в i-13:1 оценивается после :. Вы хотите (i-13):i   -  person SmokeyShakers    schedule 17.08.2020
comment
Большое спасибо @SmokeyShakers. Я думал i-13: я буду работать.   -  person jd_sal    schedule 17.08.2020
comment
Также пакет TTR имеет функцию RSI.   -  person G. Grothendieck    schedule 17.08.2020
comment
Спасибо @ Г. Гротендик   -  person jd_sal    schedule 17.08.2020
comment
Другая возможность получения 13 последовательных значений, оканчивающихся на i, — это seq(to = i, length = 13).   -  person G. Grothendieck    schedule 17.08.2020