2013-07-17 2 views
0

У меня есть две матрицы матрицы 351x1 и s2, среднего и стандартного отклонения. Я хочу моделировать нормальное распределение для новой матрицы 365x1. код, который я использовал, -R для петли в матрице

sim<-matrix(rep(NA,365),nrow=365,ncol=1) 
for (i in 1:365){y<-rnorm(1,s1[i,],s2[i,]) 
sim[i,]<-y[i]} 

Однако он генерирует только первое значение. Как мне исправить мои коды? Большое спасибо!

+0

Привет, так как вы относительно новы здесь вы можете прочитать [** о **] (http://stackoverflow.com/about) и [* * faq **] (http://stackoverflow.com/faq) о том, как работает SO. StackOverflow становится намного более ценным для всех, если, когда вы получаете ответ, который решает вашу проблему, вы принимаете его, нажимая маленькую галочку или повышайте полезный ответ. Вы тоже не обязаны делать это, но это отличный способ «вернуть» сайту, если ответ действительно решит вашу проблему. Благодаря! –

ответ

0

Нет необходимости в цикле. RNorm это vectorised так просто это сделать ...

s1 <- sample(10,365,repl=TRUE) 
s2 <- sample(3,365,repl=TRUE) 
rnorm(365 , s1 , s2) 
#[1] 5.83648500 1.64208807 0.02800676 -1.76443571 5.15361880 2.88269571 
. 
. 
. 

Это привлечет 365 случайных нормальных отклоняется с использованием каждого из значений в среднее и стандартное отклонение векторов s1 и s2 в свою очередь.

0

Причина, по которой вы получаете только одно значение, заключается в том, что в {y<-rnorm(... вы назначаете скалярную переменную y. В следующей строке вы попытаетесь получить значение y[i], которого не будет для i больше 1.

ОДНАКО, вам не нужна петля вообще. Функция rnorm векторизована, что означает, что она принимает векторы как аргументы для среднего и стандартного отклонения. Таким образом, вы можете заполнить ваш sim вектор с

sim <- rnorm(365, s1, s2) 
+0

это означает, что если я сделаю y матрицей, мои коды должны работать? как я могу это сделать в цикле? – user2472273

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