How to generate multiple matrix in R

前端 未结 3 622
一生所求
一生所求 2021-01-27 06:22

I have gotten two lists of values in R.

daily_max_car: (List 1)
21 21 22 22 22 22 21 
daily_0.8: (List 2)
16 17 17 17 18 17 17 
3条回答
  •  Happy的楠姐
    2021-01-27 06:49

    I removed for loop inside calculatewq function. Please make sure you needed a for loop in it.

    myfun <- function(Lambda, N, mu )
    {
      # browser()
      var1 <- seq_len( Lambda )
      var2 <- ( rep( N, each = Lambda) ) - var1
      var3 <- rep( 69*60*24, each = Lambda )
      var4 <- var2 * var3
    
      fun_vals <- do.call( 'rbind',
                           lapply( var1, function( x ) calculatewq( x, Lambda = Lambda, N = N, mu = mu ) ) )
    
      mat <- matrix( NA, nrow = Lambda, ncol = mu )
      mat[, 1] <- var1
      mat[, 2] <- fun_vals[, 'Wq']
      mat[, 3] <- fun_vals[, 'customer_serviced']
      mat[, 4] <- var4
      return(mat)
    }
    
    calculatewq <- function( x, Lambda, N, mu )
    {
      # browser()
      Rho <- Lambda / mu
      p0_inv <- ( Rho^x * (1-(( Rho/x )^( N-x+1)))) / (factorial( x ) * ( 1 - ( Rho / x ) ) )
      p0_inv <- p0_inv + ( Rho^x) / factorial( x )
      P0 <- 1/p0_inv
      Lq <- ( Rho^(x+1)) * (1-((Rho/x)^(N-x+1))-((N-x+1)*(1-(Rho/x))*((Rho/x)^(N-x))))*P0/(factorial(x-1)*(x-Rho)^2)
      Wq <- 60*Lq/Lambda
      Ls <- Lq + Rho
      Ws <- 60*Ls/Lambda
      PN <- (Rho^N)*P0/(factorial(x)*x^(N-x))
      customer_serviced <- (1 - PN)*100
      a <- cbind( Lq, Wq, Ls, Ws, customer_serviced )
      return(a)
    }
    
    mu <- 4
    res <- Map( myfun, 
                list( 21 ,21, 22, 22 ,22, 22 ,21 ),
                list( 16, 17, 17, 17, 18, 17 ,17 ),
                mu)
    head( res[[1]])
    #      [,1]      [,2]     [,3]    [,4]
    # [1,]    1 42.184874 19.04762 1490400
    # [2,]    2 38.241748 38.09526 1391040
    # [3,]    3 33.339271 57.13862 1291680
    # [4,]    4 26.014138 75.70348 1192320
    # [5,]    5 16.339462 89.88989 1092960
    # [6,]    6  9.121053 96.32498  993600
    

提交回复
热议问题