payback period calculation in R

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.