在迭代过程中使用最终值

时间:2015-07-13 16:58:36

标签: r matrix sapply cbind

以下是我正在使用的代码:

>>> matrix = open('myfile.txt').read()
>>> matrix = [item.split() for item in matrix.split('\n')[:-1]]

这会产生正确的输出,如下所示。但是,你可以看到这对于大约30轮可能会变得烦人,所以我认为我可以使用* sapply功能。所以我试图这样做:

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

给出了:

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

我到底该如何做到这一点,因为&#34;结束&#34;变量需要更新&#34; b&#34;值如下面代码的星号部分所示。

[1,] 4808.333 4616.347
[2,] 2264.375 2028.338

感谢您的时间。

修改

皮埃尔在下面给出了答案,但我还有另外一个问题,即如何进行这一过程&#34; n&#34;次数。皮埃尔的回答适用于这个具体问题。但是,我正试图在&#34; r&#34;和&#34; r1&#34;是像

这样的矩阵联合
    **b1 <- end** 
    r1 <- 2.3 
    I1 <- b1*(r/1200)
    pi1 <- pm-I1 
    end1 <- b1-pi1 
    end1

然后使用类似的sapply函数:

rate <- rbind(r,r1) 

有什么建议吗?

1 个答案:

答案 0 :(得分: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