2016-12-24 2 views
0

Что я пытаюсь сделать в forloop и все еще возникают трудности с:Forloop, Условные операторы, хранящих данные

prb[i]=(prb[i-1]*ER)+b[i] 
prb[1]=(prb[0]*ER)+b[1] 
prb[2]=(prb[1]*ER)+b[2] 

, а затем выходной PRB [1,2,3 ....] из левая часть уравнения.

Кроме того, определение SS для отражения PRB на предыдущем шаге по времени (то есть (PRB-1))

Я попытался сохранить результаты от моего forloop в пустых векторов. Однако значения, выводимые в векторы, являются одинаковыми значениями (то есть с первой итерации), и, похоже, он не оказывает аддитивного влияния, которое я пытаюсь выполнить. Похоже, что что-то неправильно с логикой моего кода. Я хотел бы, чтобы значения из b [i] использовались в b [i + 1] для следующего прогона forloop. У кого-нибудь есть идеи или решения проблемы? Лучший!

Мэтью

#Parameters 
c=0.2 
A=5 
d=8 
d0=5 
s=0.5 
e=0.1 
p=0.6 
ER=e/A 

#Colonization Equation Probabilities 
C2 = c*A*exp(-d*s/d0)    #ML to SS 

#Empty Vectors 
l=vector(mode="numeric", length=100) #open vectors to store the different probability values from the forloop 
b=vector(mode="numeric", length=100) 
prb=(l*ER) + b  #total probability of SS being colonized 

#Island States 
ML=1      
SS=prb   
n.I=c(ML, SS) 

#Forloop and Conditional Statements 

for(i in 2:101) { 

    (SS[i]=prb[i-1]) 
    (prb[i]=(l[i]*ER)+b[i]) 

    if (SS < 1) { 
    (l[i]=prb[i-1]) 
} else if(SS < 1){ 
    b[i]=C2 
    } 
} 
+0

Ваш цикл 'for' не использует переменную итератора,' i', а затем 'prb' инициализируется как произведение пустых векторов, а затем * C1 * и * C3 * являются константами. Как изменить элементы в пустых векторах? – Parfait

+0

Помогает ли вам переместить определения для 'prb' и' prb.T' внутри цикла? – Aramis7d

+0

Перемещение формул prb и prb.T не помогает –

ответ

0

Я скопировал код и запустил его. Мои наблюдения:

  • Прежде всего, в R, векторные индексы начинаются с 1 а не 0
  • So SS = PRB [0: 1] дает PRB [0], который является только 0.
  • Поскольку для выполнения строки для заполнения prb зависит от SS, равным> = 1, вы никогда не сможете запустить эту строку с этим условием. Когда prb [1] не 1 или больше, вы не можете изменить его, чтобы существовал порочный круг.
  • Даже если вы можете запустить его, выполнив условие (другое, конечно), так как для первой итерации prb [0] не существует, поэтому prb [0] * ER просто дает числовое значение (0), которое является пустой элемент вектора!

Итак, сначала вы должны изменить свои векторные индексы, тогда вы должны изменить свое состояние, чтобы оно давало возможность начать прыжок.

+0

l пытался сделать SS открытым вектором от значений от 0 до 1, что отражало выходные значения от prb (forloop). Я могу изменить начальную точку forloop от (i в 1: 100) до (i в 2: 101), которая, по-видимому, исправляет вторую проблему, с которой вы обращались с моим кодом. Спасибо за помощь! –

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