Ich bin ein bisschen ein Anfänger mit R, aber ich habe einige Erfahrung mit anderen Sprachen wie Python.Während Schleife innerhalb einer Funktion für R
Während ich weiß, dass es Pakete gibt, die tun können, was ich für mich tun will, möchte ich diese Programmiersprache wirklich in den Griff bekommen. Ich versuche eine Simulation einer M/M/1-Warteschlange zu erstellen und entschied, dass eine while-Schleife funktionieren würde. Ich bin jedoch ein wenig fest und hoffe auf Hilfe.
# 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
Die while-Schleife von selbst funktioniert gut und simuliert eine M/M/1-Warteschlange, wenn die Parameter für Lambda gegeben, mu, Dauer, t, Warteschlange und s. Viele Daten werden aus der Simulation generiert und in eventsTime abgelegt. Jedoch, wenn ich versuche, dies in:
sims <- function(lambda, mu, duration, t, queue, s) {}
Ich habe Probleme. Die Funktion wird gespeichert - wenn ich nach "Sims" suche, ist es genau dort. Die von mir eingegebenen Testparameter spucken jedoch keine simulierten Daten aus, obwohl R Studio einige Berechnungen durchgeführt hat.
Irgendwelche Ratschläge?
Im Allgemeinen schreiben wir Funktionen nicht in einer Weise, die Nebenwirkungen hat. d. h. wir schreiben keine Funktionen, die Variablen außerhalb der Funktion modifizieren, was Sie anscheinend zu tun versuchen. Daher gibt Ihre Funktion "sims" keine Werte explizit zurück, und alles, was Sie innerhalb der Funktion tun, ändert nur Werte im Rahmen der Funktion, nicht woanders. Sie sollten vielleicht einige grundlegende Anleitungen zum Schreiben von Funktionen in R lesen, die dieses Konzept abdecken würden. – joran