我有一个变量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?
中实现此公式答案 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