我有3列:
第一排是这样的
分期付款利息风险
0 0 1000
第一行的分期付款为0,之后为常数。让它成为100。
第i行的兴趣= 0.5%*第(i-1)行的曝光
第i行的曝光=第(i-1)行的曝光 - (第i行的安装 - 第i行的利息)
installment interest exposure
0 0 1000
100 0.005*1000 1000-(100-5)
当前的兴趣取决于之前的曝光和当前的曝光取决于当前的兴趣。这应该继续直到曝光为0.我在R中使用for循环完成了这个。但我的数据很大,我不想要for循环。所以如果可能的话,我需要像申请或更快的方法
没有循环,有没有其他方法可以做到这一点。我正在寻找一个快速的过程。
看起来像贷款摊还,你可以尝试在编码之前创建一个公式。
<不幸的是,我不太确定如何在这里的SO Markdown中渲染LaTeX。对不起,演示文稿。 >
让L开始贷款金额,我是分期付款,r是利率。
在期间,n = 0,未偿还贷款额为L.
在期间,n = 1,未偿还贷款额为(1 + r)* L - I.
在期间,n = 2,未偿还贷款额为(1 + r)^ 2 * L - (1 + r)* I - I.
在期间,n = 3,未偿还贷款额为(1 + r)^ 3 * L - (1 + r)^ 2 * I - (1 + r)* I - I.
在期间n,未偿还贷款额为(1 + r)^ n * L - I * sum_ {k = 0} ^ {n-1}(1 + r)^ k。
在此之后,这是一个编码的问题:
amor <- function(L, r, I, nvec) {
vapply(nvec,
function(n) {
if (n < 1L) stop("n must be > 0.")
L * (1+r)^n - I * sum((1+r)^(seq_len(n) -1L))
},
numeric(1))
}
amor(1000, r, 100, seq_len(12))
输出:
[1] 905.00000 809.52500 713.57262 617.14049 520.22619 422.82732 324.94146 226.56617 127.69900 28.33749 -71.52082 -171.87843
要解决的下一个问题是“这应该继续,直到曝光为0”。您可以使用n * I> L *(1 + r)^ n来估计周期总数
maxN <- round(uniroot(function(n) I*n - (1+r)^n*L, c(1, 1000))$root)
然后使用replace
将这些负数设置为0。
希望这会有所帮助。