gpt4 book ai didi

r - 简化循环计算

转载 作者:行者123 更新时间:2023-12-04 04:37:44 25 4
gpt4 key购买 nike

考虑以下向量 x :

 > 1:9
[1] 1 2 3 4 5 6 7 8 9

并考虑以下输入:
 start = 10
pmt = 2

这是我希望实现的结果(让我们称其为结果向量 res )(显示的是实际公式)。请注意,结果是向量而不是数据帧。我只是在这里显示了二维。

enter image description here

换句话说,获得 资源 ,你多 startdf 的每个单元格的累积乘积直到相应的单元格。

当向量索引是 4 或 7 的倍数时,起始值会更新。

这是我尝试过的:
     for(i in 1:9) {
res[i] = start * cumprod(df[k:i])[i]
if(i %% 3 == 0) {
start = res[i] - pmt
k = k + 3
} else {
start = res[i]
}
}
}

把这个问题放在上下文中,假设你有 10 美元的初始值(value),并且你想在 9 个月内投资它。但是,您希望在每 3 个月结束时提款(即在第 4 个月、第 7 个月开始时,...)。向量 x 代表返回的随机值。
因此,在第 4 月初,您的起始值为 start*1*2*3 提款 pmt .

这里的目的是计算9月底的财富值。

问题是,实际上,i = 200(200 个月),我需要为 10,000 个不同的向量重新计算 x .所以在上面的代码上循环 10,000 次需要永远执行!

你对如何更有效地计算这个有什么建议吗?我希望解释不会太困惑!

谢谢!

最佳答案

如果你计算出 res 的公式作为一个迭代公式,那么编写一个可以提供给 Reduce 的函数会更容易。 .这是一个简单的循环

x <- 1:9
start <- 10
pmt <- 2

res <- numeric(length(x))
res[1] <- x[1] * start
for (i in seq_along(x)[-1]) {
res[i] <- (res[i-1] - (pmt * (!(i%%4) || !(i%%7)))) * x[i]
}

如果你想把它写成 Reduce功能,它看起来像这样
Reduce(function(r, i) {
(r - (pmt * (!(i%%4) || !(i%%7)))) * x[i]
},
seq_along(x),
init = start,
accumulate = TRUE)[-1]

由于初始值的处理方式(并且迭代是在索引上,而不是值上,因为必须在索引上进行比较),因此起始值和删除结果的第一个元素有些奇怪。这里的循环可能更容易理解。

关于r - 简化循环计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19435155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com