【发布时间】:2016-08-15 14:34:46
【问题描述】:
Here is the image showing what i need to calculate。抱歉,图片中的 total_r 实际上是代码中的 test_gain,图片中的 gamma 指的是代码中的 alpha(抱歉)。同样在图像中,我在 t=3 处停止计算,但实际上我想计算它直到最后一个值为 0.6。
我对使用 apply 系列函数还很陌生。我通常使用循环,但我听说使用 apply 函数而不是嵌套的 for 循环要快得多。我尝试了几个教程,但仍然无法用 apply 函数替换我的嵌套 for 循环。任何帮助将不胜感激,下面是我要更改的代码。
基本上这就是我想要做的: 数据的第一行:从列中获取值 + alpha * 该列的下一个值(第 2 行)+ alpha ^ 2 * 列的下一个值(row3)+ alpha ^ 3 * 列的下一个值(row4),依此类推,直到最后一行。每次我都在增加 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()}
}
}
【问题讨论】:
-
什么是 gamma,如果 gamma 小于 10^-5 为什么不打印?
-
通常在 R 中,您会希望将代码矢量化并尽可能避免循环。 apply 系列的代码中有循环。查看有关矢量化的文章
-
抱歉打错了。伽马实际上是阿尔法。我现在已经改变了。当 alpha 小于 10^-5 时我跳过迭代的唯一原因只是为了加快整个过程。因为当 alpha 达到 10^-5 时,之后的任何东西都会很小,我不需要将它添加到我的总和中
-
@AliJawaad:我不确定这会加快速度,因为我相信你只会去下一个
s而不是i;您应该改用break吗?无论如何,你会想要一个更好的解决方案。 -
干杯@aichao。我还附上了一张图片,显示了我想要做的计算。图中total_r指代码中的test_gain
标签: r apply nested-loops