2013-07-17 110 views
0

我有兩個365x1矩陣s1和s2,均值和標準差矢量。 我想模擬新的365x1矩陣的正態分佈。我使用的代碼是R for 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載體,因爲你是比較新這裏,你可能想讀[** **左右(http://stackoverflow.com/about)和[* * faq **](http://stackoverflow.com/faq)瞭解SO如何工作。如果您收到解決問題的答案,您可以通過單擊小號複選標記或提供有用答案來接受它,那麼StackOverflow對每個人都更有價值。你完全沒有義務這樣做,但如果答案確實解決了你的問題,那麼這是一種「回報」網站的好方法。謝謝! –

回答

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。在下一行中,您嘗試獲取y[i]的值,i將不會存在大於1的值。

但是,根本不需要循環。 rnorm函數被矢量化,這意味着它接受矢量作爲均值和標準偏差的參數。所以,你可以用

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

這是否意味着如果我使y矩陣,我的代碼應該工作?我怎麼能在循環中做到這一點? – user2472273