Makoto
Makoto

Reputation: 111

R Function using the result inside the function

I have one variable A

0
10
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90

which is an input into the following function

 NoBeta <- function(A)
       {
          return(1-(1- B * (1-4000))/EXP(0.007*A) 
  }

The variable B is the result of this function how do I feed the result back into the function to calculate my next result? Here is B

0
0.07
0.10
0.13
0.16
0.19
0.22
0.24
0.27
0.30
0.32
0.34
0.37
0.39
0.41
0.43
0.45
0.47

So the function needs to return the values of B but also using B e.g. if we using A 10 as input then the input for B is 0, when the input for A is 15 the input for B is the result from the previous calculation 0.07

B is calculated with the following formula in Excel =1-(1-B1*(1-4000))/EXP(0.007*$A2) How do I implement this formula in R?

Upvotes: 0

Views: 532

Answers (1)

r.bot
r.bot

Reputation: 5424

If I understand your question correctly you wish to reference a previous row in a calculation for the current row.

You can adapt a function that was provided in another SO question here.

rowShift <- function(x, shiftLen = 1L) {
  r <- (1L + shiftLen):(length(x) + shiftLen)
  r[r<1] <- NA
  return(x[r])
}

test <- data.frame(x = c(1:10), y = c(2:11))

test$z <- rowShift(test$x, -1) + rowShift(test$y, -1)
> test
    x  y  z
1   1  2 NA
2   2  3  3
3   3  4  5
4   4  5  7
5   5  6  9
6   6  7 11
7   7  8 13
8   8  9 15
9   9 10 17
10 10 11 19

Then what you want to achieve becomes

test$z2 <- 1- (1-rowShift(test$x, -1)*(1-4000))/exp(0.007*rowShift(test$y, -1))
> head(test)
  x y  z         z2
1 1 2 NA         NA
2 2 3  3  -3943.390
3 3 4  5  -7831.772
4 4 5  7 -11665.716
5 5 6  9 -15445.790
6 6 7 11 -19172.560

Upvotes: 1

Related Questions