R函数使用函数内部的结果

时间:2014-11-17 11:10:09

标签: r

我有一个变量A

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

是以下函数的输入

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

变量B是此函数的结果如何将结果反馈到函数中以计算下一个结果? 这是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

因此该函数需要返回B的值,但也需要使用B,例如:如果我们使用A 10作为输入,则B的输入为0,当A的输入为15时,B的输入是前一次计算的结果0.07

B在Excel中使用以下公式计算 = 1-(1-B1 *(1-4000))/ EXP(0.007 * $ A2) 如何在R?

中实现此公式

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您希望引用当前行计算中的前一行。

您可以调整另一个SO问题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

然后你想要实现的目标变成

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