Here is the image showing what i need to calculate。对不起,图片中的total_r实际上是代码中的test_gain,图片中的gamma代表代码中的alpha(对不起)。同样在图像中,我停止计算在t = 3,但实际上我想计算它,直到最后一个值为0.6。应用函数而不是嵌套循环if语句
我对使用函数族是相当新的。我通常使用循环,但我听说使用apply函数而不是嵌套for循环要快得多。我尝试了一些教程,但仍未能用apply函数替换嵌套for循环。任何帮助将不胜感激,下面是我试图改变的代码。
基本上这就是我想要做的: 数据的第一行:从列中获取值+此列的alpha * nextvalue(第2行)+ alpha^2 * column(row3)的nextvalue +列(row4)的alpha^3 *下一个值,直到最后一行。每次我增加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
对不起,这是一个错字。伽马实际上是阿尔法。我现在改变了它。当alpha少于10^-5时,我跳过迭代的唯一原因就是加速整个过程。因为当alpha达到10^-5时,之后的任何内容都会很小,以至于我不需要将它添加到我的余额 –