首页 > 解决方案 > 在 R / 编写内部带有外部函数的循环函数

问题描述

我想用 queuecomputer https://cran.rstudio.com/web/packages/queuecomputer/queuecomputer.pdf生成 100 个排队模型(因为到达和服务时间是随机的,我总是会得到不同的结果)并存储一个特定的值每个列表都在一个单独的向量中。(队列计算机总是返回一个列表)例如让

 n_customers <- 50
 arrival_rate <- 1.8
 service_rate <- 1
 arrivals <- cumsum(rexp(n_customers, arrival_rate))
 service <- rexp(n_customers, service_rate)
 queue_obj <- queue_step(arrivals, service, servers = 2)

然后我想访问所有 100 个样本的 summary(queue_obj)$mwt 并将该值放入一个新向量中。

到目前为止我已经尝试过但它不起作用:

 queuetmp <- function(n) {
  for (i in 1:n) {
 queue[[i]] <- queue_step(cumsum(rexp(50, 1/10)), rexp(50, 1/8), servers = 2)
 mwt[i] <- (summary(queue))[[i]]$mwt
 }
 return (mwt)
}

(因为 queuecomputer 是一个非常新的包,很多人不会熟悉它,但输出只是一个典型的列表)

标签: rlistfor-loop

解决方案


我认为您需要将索引移动到i内部并首先将 and 定义queuemwt空列表,即:

library(queuecomputer)
n_customers <- 50
arrival_rate <- 1.8
service_rate <- 1
arrivals <- cumsum(rexp(n_customers, arrival_rate))
service <- rexp(n_customers, service_rate)
queue_obj <- queue_step(arrivals, service, servers = 2)
queue <- list()
mwt <- list()

queuetmp <- function(n) {
  for (i in 1:n) {
    queue[[i]] <- queue_step(cumsum(rexp(50, 1/10)), rexp(50, 1/8), servers = 2)
    mwt[i] <- (summary(queue[[i]]))$mwt
  }
  return (mwt)
}

queuetmp(10)

如果这与您的期望相符,我似乎得到了一个不平凡的答案?


推荐阅读