Here is the image showing what i need to calculate. Извините total_r в изображении на самом деле test_gain в коде и гамма в pic ссылается на альфу в коде (Извините). Также на изображении я прекращаю вычисление при t = 3, но на самом деле я хочу рассчитать его до последнего значения, равного 0,6.применять функцию вместо вложенного цикла с операторами if
Я довольно новичок в применении семейства функций. Я обычно использую циклы, но я слышал, что использование функции apply вместо вложенных для циклов намного быстрее. Я попробовал пару учебных пособий, но все же не смог заменить свой вложенный цикл for функцией apply. Любая помощь будет принята с благодарностью, а ниже - код, который я пытаюсь изменить.
В основном это то, что я пытаюсь сделать: первая строка данных: взять значение из столбца + альфа * следующее значение этого столбца (строка 2) + альфа^2 * следующее значение столбца (строка3) + alpha^3 * следующее значение столбца (строка 4) и т. д. до последней строки. Каждый раз, когда я увеличиваю мощность до Alpha.
Все эти расчеты были для первого ряда. Теперь для второй строки я проигнорирую первое значение из столбца, но все последующие значения будут принимать одинаковые значения. Ниже мой код работает отлично, но это займет слишком много времени, чтобы выполнить.
#value of alpha
alpha <- 0.85
# test_gain is a vector containing values from a column belonging to a data frame
test_gain <- testdata$Total_rew
# initialise the variables
s = 0
d = rep(0,nrow(testdata))
for (i in 1:nrow(testdata[1:4999,])){
d[i] = test_gain[i]
for (s in (i+1):nrow(testdata)){
d[i] = d[i] + alpha^(s-i) * test_gain[s]
if (alpha^(s-i) < (10^-5)) {next()}
}
}
Что такое гамма, и почему вы не печатаете, если гамма меньше 10^-5? – aichao
Как правило, в R вы захотите векторизовать свой код и избегать циклов, когда это возможно. Применимое семейство имеет петли в своем коде. Посмотрите статьи по векторизации – hedgedandlevered
извините, что это была опечатка. гамма была фактически альфа. Я изменил его сейчас. Единственная причина, по которой я пропускаю итерацию, когда альфа меньше 10^-5, - это просто ускорить весь процесс. Потому что, когда альфа достигает 10^-5, все, что после этого будет настолько маленьким, что мне не нужно добавлять его к моим суммам –