0

4 つの刺激を生成し、グラフを生成するコードを書いています。私のコードは機能しますが、4 つのグラフを生成する代わりに、それらすべてを 1 つのグラフに結合したいと考えています。どうやってやるの?

私のコード:

queueSimulation <- function(arriverate, servrate, endtime) {
    queue = numeric(0)
    arrivetimes = rexp(10000, arriverate)
    servtimes = rexp(10000, servrate)

    clock = 0.0 
    clist=c() 
    qlist=c()
    while(clock <= endtime) {
       if(length(queue) > 0 && queue[1] < arrivetimes[1]) {
          clock = clock + queue[1]
          queue = queue[-1]   
       }   
       else {
          clock = clock + arrivetimes[1]
          queue[length(queue) + 1] = servtimes[1]
          arrivetimes = arrivetimes[-1]
          servtimes = servtimes[-1]
       }   

    #queue_size= length(round(clock, 2))
       clist = c(clist , clock)
       qlist = c(qlist , length(queue))
    }   
    a<-data.frame(time=clist , qsize=qlist)
    print(a)
    mean1<-mean(qlist)
    cat("Average :", mean1, "\n")
    plot(a)
}

そして関数を呼び出します:

queueSimulation(1.0, 5.0, 100) 
queueSimulation(2.0, 4.0, 100)
queueSimulation(2.3, 3.5, 100) 
queueSimulation(4.0, 5.0, 100)
4

2 に答える 2

2

これにはもっと良い解決策があるかもしれませんが、アプローチを少し変えてみませんか。

1- 関数に 2 つの変数を追加します。1 つは色用 (cl) で、もう 1 つはメイン プロットをプロットするか、単に線を追加するか (pl) を関数に伝えるためのものです。メインの場合は 1、ラインの場合は 0。

function(arriverate, servrate, endtime,cl,pl) {

2- if ステートメントでプロットを呼び出し、y 軸を 0 から 200 の範囲に固定します。

if(pl==1){plot(a,col=cl,ylim=c(0,200),type="l")} else{lines(a,col=cl)}}

次に、これらの 2 つの変数 (cl と pl) を使用して関数を呼び出します。

queueSimulation(1.0, 5.0, 100,"red",1)  
queueSimulation(2.0, 4.0, 100,"blue",0)  
queueSimulation(2.3, 3.5, 100,"green",0)  
queueSimulation(4.0, 5.0, 100,"black",0) 

これに関する問題は、シミュレーションが y 軸に対して 200 を超える値を取得できることです。おそらく、呼び出しの 1 つで最大 y 値を取得する方法を見つけようとするでしょう。

ここに画像の説明を入力

于 2013-06-03T20:45:04.047 に答える
2

プロット関数を呼び出す前にlayout、特に put (またはバリアント)を見てください。layout(matrix(1:4,nrow=2))

于 2013-06-03T19:53:46.883 に答える