导出三个输入参数的每个组合的公式结果

时间:2016-11-09 18:15:53

标签: r loops rbind

我一直在努力解决R中的一个问题,并尝试过google和搜索功能,但还没有找到解决方案。

我想做以下事情:

为一组持续时间,金额和利率的组合得出利率支付收入。该集定义如下:

  1. 金额(a)= 1,000 - 25,000,间隔为100
  2. 持续时间(d)= 12-60(月),间隔为6
  3. 利率(i)0.00-0.015,间隔为0.001
  4. 公式如下: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

1 个答案:

答案 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]