【问题标题】:Use Final Value In Iterative Process在迭代过程中使用最终值
【发布时间】:2015-07-13 16:58:35
【问题描述】:

这是我正在使用的代码:

## 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

这会产生正确的输出,如下所示。但是,你可以看到这可能会在大约 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

感谢您的宝贵时间。

编辑

皮埃尔在下面给出了答案,但我还有另一个问题是我将如何执行此过程“n”次。皮埃尔的回答适用于这个特定问题。但是,当“r”和“r1”在一个像

这样的矩阵中联合时,我正在尝试完成这项工作
rate <- rbind(r,r1) 

然后使用类似的 sapply 函数:

t(sapply(b, function(x) {b <- b - (pm - b*(rate/1200));b}))

有什么建议吗?

【问题讨论】:

    标签: r matrix sapply cbind


    【解决方案1】:

    这是 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
    

    【讨论】:

    • 感谢您的快速回复,我总是被告知要远离 R 中的 for 循环。
    • rlist 函数是特殊包的一部分吗?
    • 我很抱歉。见编辑。我创建了一个“r”值列表
    • sapplyfor 循环之间没有区别。
    • @DavidArenburg 这也是我一直以来的想法
    猜你喜欢
    • 2021-01-17
    • 2010-12-03
    • 2021-02-22
    • 2013-06-19
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多