我一直在努力解决R中的一个问题,并尝试过google和搜索功能,但还没有找到解决方案。
我想做以下事情:
为一组持续时间,金额和利率的组合得出利率支付收入。该集定义如下:
公式如下:w = a d (((i / 12)*(1+(i / 12))^(d))/((1+(i / 12))^(d)-1)) - a ,其中w是利率支付。
我的解决方案是用三个'来计算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))
我做错了什么?我有点走上正轨吗?输出应该是包含所有可能组合的列表,并且&#39; w&#39;值。或者,输出可以是包含w的特定值的所有可能组合的列表。
提前多多谢谢你!
Best,Alex
答案 0 :(得分:3)
以下是如何调整您当前的方法:
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]