我是一个初学者与R,但我有一些Python的其他语言的经验。while循环里面的函数R
虽然我知道有些软件包可以做我想为我做的事情,但我想要真正掌握这种编程语言。我想要做的是创建一个M/M/1队列的模拟,并决定一个while循环会起作用。但是,我有点卡住,希望得到一些帮助。
# M/M/1 queue simulator
lambda <- 2 # arrival rate
mu <- 3 # service rate
duration <- 10000 # total T of the simulation
t <- 0 # current time in the simulation
queue <- 0 # start with empty queue
s <- 0 # running sum for computing average queue length
# first arrival to start process
T1 <- rexp(1,rate=lambda)
currentqueue <- 1
eventsTime <- T1
t <- T1
nEvents <- 1 # total number of events that have occurred
sims <- function(lambda, mu, duration, t, queue, s)
{
while (t<duration) {
nEvents <- nEvents+1
if(currentqueue>0) {
T1 <- rexp(1,rate=lambda+mu)
p <- runif(1,0,1)
queue[nEvents] <- currentqueue
currentqueue <- ifelse(p<lambda/(lambda+mu),
currentqueue+1,
currentqueue-1)
} else {
T1 <- rexp(1,rate=lambda)
queue[nEvents] <- currentqueue
currentqueue <- 1
}
t <- t+T1
eventsTime[nEvents] <- T1
s <- s+T1*queue[nEvents]
}
}
sims(2,3,10000,0,0,0) #tests the function with given parameters
本身while循环工作正常,并模拟一个M/M/1队列,给定的λ,μ,持续时间,T,队列,和s时的参数。大量数据从仿真中生成并放入eventsTime中。然而,当我试图把这个:
sims <- function(lambda, mu, duration, t, queue, s) {}
我有麻烦。该功能被存储 - 当我检查“模拟”时,它就在那里。但是,尽管R Studio明确执行了一些计算,但我放入的测试参数不会吐出任何模拟数据。
有什么建议吗?
通常在R中,我们不会以具有副作用的方式编写函数。即我们不编写函数来修改变量_outside_函数,这正是您似乎正在尝试做的。因此,你的'sims'函数不会显式地返回任何值,并且你在函数内部做的所有事情只修改函数范围内的值,而不是在其他地方。你也许应该阅读一些关于在R中编写函数的基本教程,这将涵盖这个概念。 – joran