의 초보자입니다. 그러나 파이썬과 같은 다른 언어에 대한 경험이 있습니다.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) {}
나는 문제가있다. 이 함수는 저장됩니다. "sims"를 확인할 때, 바로 그곳에 있습니다. 그러나 R Studio가 일부 계산을 명확하게 수행 했음에도 불구하고 내가 입력 한 테스트 매개 변수는 시뮬레이션 된 데이터를 토해 내지 않습니다.
어떤 조언이 필요합니까?
일반적으로 R에서는 부작용이있는 방식으로 함수를 작성하지 않습니다. 즉, 우리는 변수를 수정하는 함수를 작성하지 않습니다. 함수의 외형입니다. 여러분이하려고하는 것처럼 보입니다. 결과적으로, 당신의 함수'sims'는 명시 적으로 어떤 값도 반환하지 않으며, 함수 내부에서하는 모든 것은 다른 곳이 아닌 함수의 범위 내에서만 값을 수정합니다. 이 개념을 다루는 R에서 함수 작성에 대한 몇 가지 기본 자습서를 읽어야합니다. – joran