fv <- function(rate, nper, pmt, pv = 0.0, type = 0) { pvif <- (1+rate)^nper # Present value interest factor fvifa <- if(rate==0) nper else ((1+rate)^nper - 1) / rate return(-((pv * pvif) + pmt * (1.0 + rate * type) * fvifa)) } fv(rate=0.12, nper=20, pmt=-20000, type=1) fv(rate=0.01, nper=41, pmt=-100000, type=1) pv <- function(rate, nper, pmt, fv = 0.0, type = 0) { pvif <- (1+rate)^nper # Present value interest factor fvifa <- if(rate==0) nper else ((1+rate)^nper - 1) / rate return((-fv - pmt * (1.0 + rate * type) * fvifa) / pvif) } pv(rate=0.07/12, nper=60, pmt=-35000, type=1) pv(rate=0.18/12, nper=36, pmt=-130149) pmt <- function(rate, nper, pv, fv=0, type=0) { rr <- 1/(1+rate)^nper res <- (-pv-fv*rr)*rate/(1-rr) return(res/(1+rate*type)) } pmt(rate=0.18/12, nper=36, pv=3600000,fv=0, type=0) fv(rate=0.035/12, nper=c(12,18,24,35,60), pmt=-350000, type=1) pmt(rate=0.1/12, nper=c(6,12,18,24,36), pv=10000000)