2013-02-18 42 views
-1

我正在嘗試編寫RPS遊戲。以下是我的代碼。在Rstudio中運行它沒有任何反應,但是在基本的R中,我在第29行中得到了一個評估錯誤,「缺少需要真/假的值」,並且這些繪圖也得到了不等價的x,y軸錯誤。必須有一些簡單的東西我錯過了爲什麼只有如果是錯誤的。謝謝你的時間。if函數中的評估錯誤。還在代碼中繪製錯誤。在R

Np<-1200 #pop size 
Ng<-300 #generation time  

P<-matrix(data=NA, nrow=Np/2, ncol=2) #matrix of pop 
strategy=c('Ro','Pa','Sc') 
P1<-sample(strategy, size=Np, replace=TRUE, prob=c(1/3,1/3,1/3)) #pop with equal probs of any strategy 

# "res <- matrix(P1, nrow=Ng, ncol=3) #matrix for results" # defunct remove! 
fR=c() 
fP=c() 
fS=c() 
# result vectors for each strategy 

# res<-matrix(NA, ng,3) # matrix as per example. results vectors returned null. 

pR<- 0.5 
pP<- 0.5 
pS<- 0.5 
# probabilities of success in each encounter of pX winning. 

for(i in 1:Ng) { 
    for(j in 1:(Np/2)){ 
    if(P[j,1]=='Ra'& P[j,2]=="Sc"& runif(1)<pR){P[j,2]<-"Ra" 
    } 
    if(P[j,1]=='Pa'& P[j,2]=="Sc"& runif(1)<pS){P[j,1]<-"Sc" 
    } 
    if(P[j,1]=='Sc'& P[j,2]=="Ra"& runif(1)<pR){P[j,1]<-"Ra" 
    } 
    if(P[j,1]=='Ra'& P[j,2]=="Pa"& runif(1)<pP){P[j,1]<-"Pa" 
    } 
    if(P[j,1]=='Pa'& P[j,2]=="Ra"& runif(1)<pP){P[j,2]<-"Pa" 
    } 
    if(P[j,1]=='Sc'& P[j,2]=="Pa"& runif(1)<pS){P[j,2]<-"Sc" 
    } 
} # each row fights and winner replaces with appropriate probability. 

P[,2]<-sample(P[,2]) #randomise interactions 
fR=c(fR, sum(P=="Ra")) 
fP=c(fP, sum(P=="Pa")) 
fS=c(fS, sum(P=="Sc")) 
} 


plot(x=fR,y=Ng, ylab="frequency", xlab="Generation", col="black", type="l") 
lines(fP, Ng, col="green") 
lines(fS, Ng, col="red") 
+0

我認爲,所有你需要做的就是填充您的矩陣一旦通過所有的if語句去了。 – N8TRO 2013-02-18 17:35:57

+0

非常感謝您的幫助。 – Sanalphatau 2013-02-18 18:24:31

回答

1
Error in if (P[j, 1] == "Sc" & P[j, 2] == "Ra" & runif(1) < pR) { : 
    missing value where TRUE/FALSE needed 
> i 
[1] 1 
> j 
[1] 1 
> str(P) 
logi [1:600, 1:2] NA NA NA NA NA NA ... 

它出現了錯誤,當ij是:1(不像其他的功能,for循環指數仍然在他們的最後分配,如果一個循環異常終止。)你不能測試「==」當你的P矩陣全是NA。當測試返回NA時,if函數會產生錯誤。也許你打算用P1寫內環測試?也許yhis將是一個快樂建立的元策略:

P<-matrix(data=NA, nrow=Np/2, ncol=2) 
strategy=c('Ro','Pa','Sc') 
P[]<-sample(strategy, size=Np, replace=TRUE, prob=c(1/3,1/3,1/3))  
+0

非常感謝。我說的是運行錯誤的矩陣。還整理了繪圖錯誤。一切都很好。 – Sanalphatau 2013-02-18 18:23:43