2013-05-28 5 views
-1

Я использую код R для написания имитаций. Тем не менее, я столкнулся с некоторыми проблемами здесь. Я запускаю симуляции 10 раз. Заинтересованная переменная - это «I», которая первоначально равна 10.Моделирование с использованием кода 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^2» и снова сохранить значения «I^2». Как я могу написать его?

+0

Вы можете установить, какая функция будет 'return'. Это может быть список желаемых значений. Что-то по строкам 'out <- list (g = g, l = l, l2 = l^2); вернуться (уходит) '. Обратите внимание, что оператор 'return' не нужен, если это последняя строка в вашей функции. –

+0

В моей программе я могу получить список «S» и «я» в конце. Моя цель состоит в том, чтобы квадратировать вывод «I» для каждого моделирования. – 1014

+0

Каков ваш результат, массив? Если это так, вы можете выровнять весь столбец. –

ответ

1

ли вы имеете в виду что-то вроде этого ?:

I <- I^2 
+0

Да, но поскольку у меня есть 10 симуляций. И «я» - это мой результат. Поэтому я хочу собрать все это для всех 10 симуляций. – 1014

Смежные вопросы