Как я могу преобразовать эти два цикла 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-ю позицию каждого объекта.