为三个输入参数的每个组合推导公式的结果
Derive the result of a formula for each combination of three input parameters
我一直在努力解决 R 中的一个问题,并尝试了 google 和搜索功能,但没有找到解决方案。
我想做以下事情:
推导出一组期限、金额和利率组合的利率支付收入。集合定义如下:
- 金额 (a) = 1,000 - 25,000,间隔为 100
- 持续时间 (d) = 12 - 60(月),间隔为 6
- 利率 (i) 0.00 - 0.015,间隔为 0.001
公式如下:w = ad(((i/12)*(1+(i/12))^(d) )/((1+(i/12))^(d)-1)) - 一个
,其中 w 是利率支付。
我的解决方案是用三个 'for' 循环计算 w 并用 'rbind' 命令保存数据。遗憾的是,这对我不起作用:
result = NULL
amount <- seq(1000, 25000, by=100)
duration <- seq(12, 60, by=6)
interest <- seq(0, 0.015, by=0.0001)
for (d in duration){
for (a in amount){
for (i in interest){
w = a*d*(((i/12)*(1+(i/12))^(d))/((1+(i/12))^(d)-1)) - a
}
}
}
result = rbind(d, data.frame(d, a, i, w))
我做错了什么?我在正确的轨道上吗?输出应该是一个包含所有可能组合和 'w' 值的列表。或者,输出可以是一个列表,其中包含 w.
的特定值的所有可能组合
非常感谢您!
最好的,亚历克斯
以下是调整当前方法的方法:
amount <- seq(1000, 25000, by=100)
duration <- seq(12, 60, by=6)
interest <- seq(0, 0.015, by=0.0001)
result <- expand.grid(amount, duration, interest)
names(result) <- c("amount", "duration", "interest")
for(i in 1:nrow(result)){
result$w[i] <- result$amount[i]*result$duration[i]*(((result$interest[i]/12)*(1+(result$interest[i]/12))^(result$duration[i]))/((1+(result$interest[i]/12))^(result$duration[i])-1)) - result$amount[i]
}
然而,data.table
大约快了一百万倍:
library("data.table")
amount <- seq(1000, 25000, by=100)
duration <- seq(12, 60, by=6)
interest <- seq(0, 0.015, by=0.0001)
result <- expand.grid(amount, duration, interest)
setDT(result)
setnames(result, c("Var1", "Var2", "Var3"), c("amount", "duration", "interest"))
result[, w := amount*duration*(((interest/12)*(1+(interest/12))^(duration))/((1+(interest/12))^(duration)-1)) - amount]
我一直在努力解决 R 中的一个问题,并尝试了 google 和搜索功能,但没有找到解决方案。
我想做以下事情:
推导出一组期限、金额和利率组合的利率支付收入。集合定义如下:
- 金额 (a) = 1,000 - 25,000,间隔为 100
- 持续时间 (d) = 12 - 60(月),间隔为 6
- 利率 (i) 0.00 - 0.015,间隔为 0.001
公式如下:w = ad(((i/12)*(1+(i/12))^(d) )/((1+(i/12))^(d)-1)) - 一个 ,其中 w 是利率支付。
我的解决方案是用三个 'for' 循环计算 w 并用 'rbind' 命令保存数据。遗憾的是,这对我不起作用:
result = NULL
amount <- seq(1000, 25000, by=100)
duration <- seq(12, 60, by=6)
interest <- seq(0, 0.015, by=0.0001)
for (d in duration){
for (a in amount){
for (i in interest){
w = a*d*(((i/12)*(1+(i/12))^(d))/((1+(i/12))^(d)-1)) - a
}
}
}
result = rbind(d, data.frame(d, a, i, w))
我做错了什么?我在正确的轨道上吗?输出应该是一个包含所有可能组合和 'w' 值的列表。或者,输出可以是一个列表,其中包含 w.
的特定值的所有可能组合非常感谢您!
最好的,亚历克斯
以下是调整当前方法的方法:
amount <- seq(1000, 25000, by=100)
duration <- seq(12, 60, by=6)
interest <- seq(0, 0.015, by=0.0001)
result <- expand.grid(amount, duration, interest)
names(result) <- c("amount", "duration", "interest")
for(i in 1:nrow(result)){
result$w[i] <- result$amount[i]*result$duration[i]*(((result$interest[i]/12)*(1+(result$interest[i]/12))^(result$duration[i]))/((1+(result$interest[i]/12))^(result$duration[i])-1)) - result$amount[i]
}
然而,data.table
大约快了一百万倍:
library("data.table")
amount <- seq(1000, 25000, by=100)
duration <- seq(12, 60, by=6)
interest <- seq(0, 0.015, by=0.0001)
result <- expand.grid(amount, duration, interest)
setDT(result)
setnames(result, c("Var1", "Var2", "Var3"), c("amount", "duration", "interest"))
result[, w := amount*duration*(((interest/12)*(1+(interest/12))^(duration))/((1+(interest/12))^(duration)-1)) - amount]