/ / Utiliser la valeur finale dans un processus itératif - r, matrix, sapply, cbind

Utiliser la valeur finale dans un processus itératif - r, matrice, sapply, cbind

Voici le code avec lequel je travaille:

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

Cela produit le bon résultat, qui est montréci-dessous dans le post. Mais, vous pouvez voir à quel point cela peut devenir agaçant pendant environ 30 tours, alors je pensais pouvoir utiliser une fonction * sapply. Alors j'ai tenté de faire:

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

Qui donne:

[1,] 4808.333 4804.375
[2,] 2268.333 2264.375

Cela n'a pas produit le résultat souhaité, à savoir:

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

Comment ferais-je exactement cela parce que les variables "end" ont besoin de la valeur "b" mise à jour, comme indiqué dans la partie étoilée du code ci-dessous.

    **b1 <- end**
r1 <- 2.3
I1 <- b1*(r/1200)
pi1 <- pm-I1
end1 <- b1-pi1
end1

Merci pour votre temps.

modifier

Pierre donne une réponse ci-dessous, mais j'en ai une autrequestion qui est comment ferais-je ce processus "n" nombre de fois. La réponse de Pierre fonctionne pour cette question spécifique. Mais j’essaie de faire en sorte que cela fonctionne lorsque "r" et "r1" sont joints dans une matrice telle que

rate <- rbind(r,r1)

Et utilisez ensuite une fonction sapply du genre:

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

Aucune suggestion?

Réponses:

1 pour la réponse № 1

C'est une situation où pour les boucles brillent:

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