Как я могу преобразовать эти два цикла for в цикл foreach в R, чтобы получить такой же результат?

У меня есть код, выполнение которого занимает довольно много времени. По моим приблизительным оценкам, на то, чтобы запустить его на моем наборе комбинаций, который я хочу протестировать, потребуется несколько дней, поэтому я всегда запускаю его на меньшем наборе. По этой причине я хотел бы преобразовать его в конструкцию цикла foreach, чтобы воспользоваться преимуществами многоядерного процессора. Я изо всех сил пытался преобразовать следующий код в цикл foreach.

pcall=c
lcall=d
pandlcall=c()
pandl=c()
cltime=c()
clpr=c()

for (i in 1:(dim(poss)[1]-1)) {
    for (j in 1:(length(b)-poss[i,2])) {
      if ((b[poss[i,2]+j]-b[poss[i,2]])/b[poss[i,2]]>=pcall) {
        pandlcall[i]=1
        pandl[i]=(b[poss[i,2]+j]-b[poss[i,2]])/b[poss[i,2]]
        cltime[i]=poss[i,2]+j
        clpr[i]=b[poss[i,2]+j]
        break
      } else {
        if ((b[poss[i,2]+j]-b[poss[i,2]])/b[poss[i,2]]<=lcall) {
          pandlcall[i]=-1
          pandl[i]=(b[poss[i,2]+j]-b[poss[i,2]])/b[poss[i,2]]
          cltime[i]=poss[i,2]+j
          clpr[i]=b[poss[i,2]+j]
          break
        } else {
          next
        }
      }
    }
  }

В основном я пытаюсь создать форекс-тестирование. Как видите, приведенный выше код сохраняет определенные значения при выполнении определенных критериев прибыли или убытка. После запуска обоих циклов я хотел бы получить data.frame изpandlcall, pandl, cltime, clpr, поэтому я сохраняю эти значения как векторы на каждой итерации. b а также poss - это еще один data.frames, по которому я запускаю циклы, как вы можете видеть.

Я много дней пытался переделать его, чтобы его можно было использовать в dopar foreach. Во время моих проб и ошибок я заменил сохранение значений из векторов в списки, поэтому вместо, например,pandlcall[i]=1 я имел reslist[[1]][i]=1, так что в итоге у меня получился не data.frame, а список. Перед циклами я создал этот пустой списокreslist=list(pandlcall,pandl,cltime,clprice).

Для этих двух основных циклов for (i и j) он работает, но когда я "заменяю" внешний цикл for на цикл foreach, он, конечно, не работает. Идея, которая возникла у меня в голове, заключалась в том, что я создам список, в котором будут эти 4 объекта ("вектора"), каждый i-й цикл будет помещать значение в i-ю позицию каждого объекта.

0 ответов

Другие вопросы по тегам