payback_period <- Inf
@nirgrahamuk has given you the right answer given your specification of the problem. Your issue isn't getting help with R code, it's that there is something wrong with the way you are describing the question.
I have 30 cases like the one I mentioned above, so need to calculate payback periods for all 30 cases, the one above was just a single one of them. Now, out of these 30 cases, some of them has positive cash flows and some of them has negative cash flows. So for some, when I calculate payback period in excel, I get payback periods like 3/4/5, which are all correct. So I want to be able to calculate payback period for those cases which has positive cash flows and will have positive payback period as well. While I calculated them in excel, my supervisors want me to calculate them in R. So I need the payback period calculation codes in R. At least, I should get the same no that I got in excel from the positive cash flows.
Here's a quick and dirty method.
initial_investment <- 15
annual_cash_flow <- c(10,20,5)
which(cumsum(annual_cash_flow)>=initial_investment)[1]
generallising and accounting for the failure case :
mypayback <- function(initial_investment,
annual_cash_flow){
r1 <- which(cumsum(annual_cash_flow)>=initial_investment)[1]
ifelse(is.na(r1),Inf,r1)
}
mypayback(initial_investment = 15,
annual_cash_flow = c(10,20,5))
mypayback(initial_investment = 63,
annual_cash_flow = rep(-100,12))
improve precision of payback:
mypayback <- function(initial_investment,
annual_cash_flow){
r1 <- which(cumsum(annual_cash_flow)>=initial_investment)[1]
if (!is.na(r1)) {
ttl_cf = cumsum(annual_cash_flow[1:(r1-1)])
pay_back = (initial_investment - ttl_cf) / annual_cash_flow[r1] + r1[1] - 1
}
ifelse(is.na(r1), Inf, pay_back)
}
mypayback(initial_investment = 15,
annual_cash_flow = c(10,20,5))
mypayback(initial_investment = 63,
annual_cash_flow = rep(-100,12))
Thank you so much everyone.
Thank you. Is there any similar code for IRR calculation in R as well?
I am using the below code but not sure if it is correct:
...
CF0
[1] 66.332
CF$Flow
[1] -140.4418 -140.4891 -140.5481 -140.5939 -140.6614 -140.7156 -140.7849 -140.8675 -140.9387 -141.0249 -138.6678 -138.6678 -138.6678
[14] -138.6678 -138.6678 -138.6678 -138.6678 -138.6678 -138.6678 -138.6678
library(FinCal)
irr(cf=c(-CF0,CF$Flow))
...
it gives me the following error:
Error in uniroot(function(r) -1 * pv.uneven(r, subcf) + cf[1], interval = c(1e-10, :
no sign change found in 1000 iterations
Is the code correct? I ran this code for positive cash flows as well, but the same error appears, so it tells me something is probably wrong.