R If-Else排序条件

R If-Else排序条件,r,if-statement,matrix,R,If Statement,Matrix,在涉及向量之前,我问了一个类似的问题,并尝试将其应用到矩阵中,如中所示 以下是我正在使用的代码: 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,

在涉及向量之前,我问了一个类似的问题,并尝试将其应用到矩阵中,如中所示

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

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;
这太长了,因为所需的输出是一个4 x 5的矩阵,它有4倍的列数。在我之前提出的问题中,哪一个是类似的,是关于向量的,这就是为什么我认为我的代码不起作用的原因。 所需输出为:

        [,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
感谢您的帮助

更新


我开始想,也许这样做的方法是在创建变量“Test2”时更改一些代码。不确定如何改变,但这是一个想法

@akrun很抱歉编辑了它。是的,我想我已经弄明白了。。。我没有t@akrun尝试使用索引和rbind进行此操作,它生成正确的数字,但行的顺序错误。我认为您的条件不正确。根据预期的输出,您选择了1、3、5、7和9列。@akrun我认为这不是真的。根据我创建的条件,所有内容都是混乱的。y中有4个值,即0、5、10、0。您正在使用
sapply
和if-else条件循环它。i、 e.如果值为0,则得到x2的1、3、5、7、9列,如果不是,则得到2、4、6、8、10列。因此,当我们循环y值时,这会重复4次。@akrun很抱歉编辑了它。是的,我想我已经弄明白了。。。我没有t@akrun尝试使用索引和rbind进行此操作,它生成正确的数字,但行的顺序错误。我认为您的条件不正确。根据预期的输出,您选择了1、3、5、7和9列。@akrun我认为这不是真的。根据我创建的条件,所有内容都是混乱的。y中有4个值,即0、5、10、0。您正在使用
sapply
和if-else条件循环它。i、 e.如果值为0,则得到x2的1、3、5、7、9列,如果不是,则得到2、4、6、8、10列。因此,当我们循环通过y值时,这会重复4次。
      [,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
        [,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