私は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ループが正常に動作し、ラムダ、ミュー、持続時間、T、キュー、およびsのパラメータを所定のM/M/1待ち行列を、シミュレートします。多くのデータがシミュレーションから生成され、eventsTimeに入れられます。しかし、私はこれを入れようとしたときに:
sims <- function(lambda, mu, duration, t, queue, s) {}
私は問題があります。この機能は保存されています。私が「シムズ」をチェックすると、すぐそこにあります。しかし、R Studioがいくつかの計算を明確に実行しているにもかかわらず、シミュレートされたデータは吐き出されません。
アドバイスはありますか?
一般に、Rでは、副作用のある方法で関数を記述しません。つまり、あなたがしようとしているような、関数の外側に変数を変更する関数を記述しません。結果として、あなたの関数 'sims'は明示的に値を返しません。関数内で行うことは関数のスコープ内の値だけを変更し、他の部分は変更しません。 Rで関数を記述するための基本的なチュートリアルを読んでください。これはこの概念をカバーします。 – joran