2013-05-28 71 views
-1

我正在使用R代碼編寫模擬。但是,我在這裏遇到了一些問題。我正在模擬10次。感興趣的變量是最初等於10的'I'。使用R代碼進行模擬

set.seed(12345) 
Simulations<-10 
Nsteps<-100 
S<-50 
I<-10 
a<-2 
singlesim <- function(alpha,beta,s,i){ 
a<- alpha*s*i 
b<- beta*i 
d<- runif(1) 
ran <- max(a*d,beta*i*d) 
z<-c(s,i) 
j<- ifelse(c(ran>a&ran<=a+b, ran>a&ran<=a+b),c (s+1,i-1),z) 
l<- ifelse(c(ran<=a,ran<=a),c(s-1,i+1),z) 
x<- ifelse(c(ran<=a,ran<=a),l,j) 
q<- ifelse(j==z&l==z,z,x) 
g<- ifelse(c(ran==0,ran==0),z,q) 
g} 

onecompsim <- function(Nsteps,S,I,alpha,beta){ 
P<- array(0,c(Nsteps,2)) 
Z<- array(0,c(Nsteps,2)) 
Y<- array(0,c(Nsteps,2)) 
P[1,]<-c(S,I) 
for(i in 2:Nsteps){ 
P[i,]<- singlesim(alpha,beta,P[i-1,1],P[i-1,2])} 
P} 

fisim<- function(Simulations,Nsteps,S,I,alpha,beta){ 
Q<-array(0,c(Nsteps,2,Simulations)) 
for(i in 1:Simulations){ 
Q[,,i] <- onecompsim(Nsteps,S,I,alpha,beta)} 
Q} 
res<-fisim(10,100,50,10,0.005,1) 
print(res) 

在這個程序的最後,我用兩個變量'S'和'I'得到了我想要的值。但是,我想保存'I'並將其平方,'I^2'並再次保存'I^2'的值。我怎麼寫它?

+0

您可以設置什麼功能'return'。它可以是所需值的列表。沿着'out < - list(g = g,l = l,l2 = l^2)返回(出)'。請注意,如果函數的最後一行是'return'語句,則不需要。 –

+0

在我的程序中,我可以最終獲得'S'和'I'的列表。我的目標是爲每個模擬輸出「I」。 – 1014

+0

那你的結果是什麼,一個數組?如果是這樣,您可以將整個列平方。 –

回答

1

你的意思是這樣的?:

I <- I^2 
+0

是的,但因爲我有10個模擬。而'我'是我的輸出。所以我想把所有的10個模擬全部平分。 – 1014