0

I have if...else function to replace the value of survival rate for 28 periods, I think it stop replacing any value after row 2. As a result, "number of items to replace is not a multiple of replacement length".

Survival.rate[nperiod, ] = Survival.rate[nperiod - 1,] * Retention.Rate           

Error in annual.profit[nperiod, ] = annual.profit * Survival.rate[nperiod, : number of items to replace is not a multiple of replacement length

nperiods = 28   
Survival.rate = matrix(0, nrow=nperiods, ncol=5)
annual.profit = matrix(0, nrow=nperiods, ncol=5)
dis.annual.profit = matrix(0, nrow=nperiods, ncol=5)

for (nperiod in 1:nperiods) {

  if (nperiod==1) {

    Survival.rate[nperiod, ] = 1
    # calculate annual profit for year.one
    annual.profit[nperiod, ] = Annual.Margin-Acquisition.Cost

  } 
  else {

    Survival.rate[nperiod, ] = Survival.rate[nperiod - 1,] * Retention.Rate 

    annual.profit[nperiod, ] = annual.profit * Survival.rate[nperiod, ]

  }
  dis.annual.profit[nperiod, ] =  annual.profit[
    nperiod, ] / (1+interest.rate)^(nperiod)

}`
Gonzo345
  • 1,133
  • 3
  • 20
  • 42
  • 1
    Where is `Annual.Margin-Acquisition.Cost` coming from? – Sonny Mar 28 '19 at 10:56
  • Welcome to Stack Overflow! You may want to check out [How to Make a Greate R Reproducible Example](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). I don't think we quite have enough information to help you. In particular (in addition to @Sonny's question), what is `Retention.Rate`? – duckmayr Mar 28 '19 at 11:01
  • 1
    `annual.profit * Survival.rate[nperiod, ]` will create a 28x5 matrix , While `annual.profit[nperiod, ]` is a vector. That line is not correct. – Sonny Mar 28 '19 at 11:03
  • Good catch @Sonny – duckmayr Mar 28 '19 at 11:08

0 Answers0