我是一個初學者與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