2013-07-17 3 views
0

2 개의 365x1 행렬 s1과 s2, 평균 및 표준 편차 벡터가 있습니다. 새로운 365x1 행렬에 대한 정규 분포를 시뮬레이트하고 싶습니다. 내가 사용한 코드는R for matrix for 루프

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

하이로 sim 벡터를 채울 수있는 [* * faq **] (http://stackoverflow.com/faq)를 참조하십시오. StackOverflow는 문제를 해결하는 답변을 받으면 작은 체크 표시를 클릭하거나 유용한 대답을 upvote하여 수락하면 모든 사람에게 훨씬 더 가치가 있습니다. 당신은 절대적으로 어느 쪽도 할 의무가 없습니다. 그러나 대답이 사실상 당신의 문제를 해결했다면 사이트에 "되돌려주는"좋은 방법입니다. 감사! –

답변

0

루프가 필요 없습니다. rnorm는

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 
. 
. 
. 

은 평균 및 표준 편차 벡터 차례로 s1s2의 각 값을 이용하여 임의의 통상 365 벗어날 그리는 것이다 .. 그래서 그냥 이렇게 벡터화된다.

0

{y<-rnorm(...y을 할당했기 때문에 하나의 값만 얻는 이유가 있습니다. 다음 줄에는 i이 1보다 큰 y[i] 값을 얻으려고합니다.

하지만 루프가 필요하지는 않습니다. rnorm 함수는 벡터화되었으므로 평균 및 표준 편차에 대한 인수로 벡터를 사용할 수 있습니다. 그래서 당신은 당신이 여기에 상대적으로 새로운 때문에 당신은 [**에 대한 **] (http://stackoverflow.com/about) 등을 읽어보십시오,

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

그러면 y를 행렬로 만들면 코드가 작동해야합니까? 루프에서 어떻게 할 수 있습니까? – user2472273