在迭代过程中使用最终值
Use Final Value In Iterative Process
这是我正在使用的代码:
## Round 1
b <- c(5000,2500)
r <- c(2,2.1)
pm <- c(200,240)
I <- b*(r/1200)
pi <- pm-I
end <- b-pi
end
## Round 2
b1 <- end
r1 <- (2.3,2.3)
I1 <- b1*(r/1200)
pi1 <- pm-I1
end1 <- b1-pi1
end1
这会产生正确的输出,如下面的 post 所示。但是,您可以看到这在大约 30 个回合后会变得很烦人,所以我认为我可以使用 *sapply 函数。所以我尝试这样做:
r2<- matrix(c(2,2.1,2.3,2.3),nrow=2)
I2 <- sapply(b, function (x)
x*(r2/1200)
)
pi2 <- sapply(I, function (l)
pm-l )
end2 <- b-pi2
end2
给出:
[1,] 4808.333 4804.375
[2,] 2268.333 2264.375
这没有产生所需的输出,即:
[1,] 4808.333 4616.347
[2,] 2264.375 2028.338
我将如何执行此操作,因为 "end" 变量需要更新后的 "b" 值,如下面代码中带星号的部分所示。
**b1 <- end**
r1 <- 2.3
I1 <- b1*(r/1200)
pi1 <- pm-I1
end1 <- b1-pi1
end1
感谢您的宝贵时间。
编辑
Pierre 在下面给出了答案,但我还有另一个问题,即我将如何执行此过程 "n" 次。皮埃尔的回答适用于这个具体问题。但是,当 "r" 和 "r1" 像
这样的矩阵联合时,我试图使这项工作正常进行
rate <- rbind(r,r1)
然后使用类似于以下的 sapply 函数:
t(sapply(b, function(x) {b <- b - (pm - b*(rate/1200));b}))
有什么建议吗?
这是 for 循环大放异彩的情况:
rlist <- list(r, r1)
x <- vector("list", 2)
for(i in 1:2) {b <- b - (pm - b*(rlist[[i]]/1200)); x[[i]] <- b}
`names<-`(as.data.frame(x), c('x', 'y'))
# x y
#1 4808.333 4617.549
#2 2264.375 2028.715
这是我正在使用的代码:
## Round 1
b <- c(5000,2500)
r <- c(2,2.1)
pm <- c(200,240)
I <- b*(r/1200)
pi <- pm-I
end <- b-pi
end
## Round 2
b1 <- end
r1 <- (2.3,2.3)
I1 <- b1*(r/1200)
pi1 <- pm-I1
end1 <- b1-pi1
end1
这会产生正确的输出,如下面的 post 所示。但是,您可以看到这在大约 30 个回合后会变得很烦人,所以我认为我可以使用 *sapply 函数。所以我尝试这样做:
r2<- matrix(c(2,2.1,2.3,2.3),nrow=2)
I2 <- sapply(b, function (x)
x*(r2/1200)
)
pi2 <- sapply(I, function (l)
pm-l )
end2 <- b-pi2
end2
给出:
[1,] 4808.333 4804.375
[2,] 2268.333 2264.375
这没有产生所需的输出,即:
[1,] 4808.333 4616.347
[2,] 2264.375 2028.338
我将如何执行此操作,因为 "end" 变量需要更新后的 "b" 值,如下面代码中带星号的部分所示。
**b1 <- end**
r1 <- 2.3
I1 <- b1*(r/1200)
pi1 <- pm-I1
end1 <- b1-pi1
end1
感谢您的宝贵时间。
编辑
Pierre 在下面给出了答案,但我还有另一个问题,即我将如何执行此过程 "n" 次。皮埃尔的回答适用于这个具体问题。但是,当 "r" 和 "r1" 像
这样的矩阵联合时,我试图使这项工作正常进行rate <- rbind(r,r1)
然后使用类似于以下的 sapply 函数:
t(sapply(b, function(x) {b <- b - (pm - b*(rate/1200));b}))
有什么建议吗?
这是 for 循环大放异彩的情况:
rlist <- list(r, r1)
x <- vector("list", 2)
for(i in 1:2) {b <- b - (pm - b*(rlist[[i]]/1200)); x[[i]] <- b}
`names<-`(as.data.frame(x), c('x', 'y'))
# x y
#1 4808.333 4617.549
#2 2264.375 2028.715