Я пытаюсь сохранить выходные данные из поля forloop в матрице n.I
в конце кода, но я уверен, что что-то не так с моей выходной матрицей. Он дает мне все одинаковые значения: 0 или 1. Я знаю, что print(SS)
выводит правильные значения и может видеть, что forloop работает правильно.Для хранения контуров выходных данных
Есть ли у кого-нибудь какие-либо рекомендации относительно того, как исправить матрицу или каким-либо образом, что я могу хранить данные с forloop? Заранее спасибо!
c=0.2
As=1
d=1
d0=0.5
s=0.5
e=0.1
ERs=e/As
C2 = c*As*exp(-d*s/d0)
#Island States (Initial Probability)
SS=0
for(i in 1:5) {
if (SS > 0) {
if (runif(1, min = 0, max = 1) < ERs){
SS = 0
}
}
else {
if (runif(1, min = 0, max = 1) < C2) {
SS = 1
}
}
print(SS)
}
n.I=matrix(c(SS), nrow=i, ncol=1, byrow=TRUE)
Не могли бы вы подробно остановиться на том, что именно означает эта функция? Кажется, это дает мне аналогичные значения тому, что генерировал цикл for (т. Е. Этот способ работает). Я все еще новичок в обучении R и заметил, как люди, похоже, избегают использовать forloops, когда это вообще возможно. Почему это? Большое спасибо Роланду! –
Вы должны прочитать «Введение в R». Это создает сразу 100 случайных значений и сравнивает ваше значение x со всеми этими моментами одновременно. Полученный логический вектор (значений TRUE/FALSE) затем превращается в целочисленный вектор (значения 1/0). Векторизация означает, что цикл происходит в скомпилированном коде, который быстрее на многие порядки. Векторизованный код обычно также гораздо читабельнее (как демонстрирует этот пример). – Roland