mercredi 29 juillet 2015

If Else Sequencing Condition

So I have asked a similar question before involving vectors and tried to just apply it a matrix as shown in Cbind/Rbind With Ifelse Condition.

Here is the code that I am working with:

y <- c(0,5,10,0)
n <- 9

R <- t(c(2.05, 2.05, 2.05, 2.55, 2.55, 2.55, 2.95, 2.95, 2.95))
R <- (replicate(4,R))
R <- (matrix(R, nrow=4))
R <- t(apply(R,1,sort))

mat <- t(sapply(y, function(test) pmax(seq(test, (test-n+1), -1), 0) ))
mat



P <- replicate(ncol(R),(c(6447.88,6447.88,6447.88,5000)))

EnvTest <- new.env()
EnvTest$Orig <- c(548453.5,548453.5,548453.5,500000)


FuncTest2 <- function(pp) {
  EnvTest$Orig <- ifelse(R[,pp]==0|mat[,pp]!=0,EnvTest$Orig,EnvTest$Orig-(P[,pp]-EnvTest$Orig*R[,pp]/1200));
  return(EnvTest$Orig);
};
Test2 <- rbind(EnvTest$Orig,do.call(rbind,lapply(1:9,FuncTest2)));
x2 <- t(Test2);
x2;

The above code works perfectly fine, this is what I am having trouble with.

x2 <- t(sapply(y, function(x) if(x == 0) x2[,seq(1,10,2)] else x2[,seq(2,10,2)])) 

which produces...

      [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]    [,10]    [,11]    [,12]
[1,] 548453.5 548453.5 548453.5 500000.0 537422.2 548453.5 548453.5 491701.3 526574.8 548453.5 548453.5 483577.3
[2,] 542942.6 548453.5 548453.5 495854.2 531892.4 548453.5 548453.5 487541.2 521245.9 548453.5 548453.5 479604.9
[3,] 542942.6 548453.5 548453.5 495854.2 531892.4 548453.5 548453.5 487541.2 521245.9 548453.5 548453.5 479604.9
[4,] 548453.5 548453.5 548453.5 500000.0 537422.2 548453.5 548453.5 491701.3 526574.8 548453.5 548453.5 483577.3
        [,13]    [,14]    [,15]    [,16]    [,17]    [,18]    [,19]    [,20]
[1,] 515905.7 543171.1 548453.5 475624.0 505533.7 532933.3 548453.5 467953.1
[2,] 510726.1 538058.5 548453.5 471793.3 500328.6 527795.6 548453.5 464103.5
[3,] 510726.1 538058.5 548453.5 471793.3 500328.6 527795.6 548453.5 464103.5
[4,] 515905.7 543171.1 548453.5 475624.0 505533.7 532933.3 548453.5 467953.1

which is too long because the desired output is a 4 x 5 matrix, and this has 4 times the number of columns. In the question that I asked before which is similar was dealing with vectors which is why I think my code does not work. The desired output is:

        [,1]     [,2]     [,3]     [,4]     [,5]
    [1,] 548453.5 537422.2 526574.8 515905.7 505533.7
    [2,] 548453.5 548453.5 548453.5 538058.5 527795.6
    [3,] 548453.5 548453.5 548453.5 548453.5 548453.5
    [4,] 500000.0 491701.3 483577.3 475624.0 467953.1

Any help is appreciated.

Aucun commentaire:

Enregistrer un commentaire