0

我有两个 365x1 矩阵 s1 和 s2,均值和标准差向量。我想模拟一个新的 365x1 矩阵的正态分布。我使用的代码是

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]}

但是它只产生第一个值。我应该如何修复我的代码?非常感谢!

4

2 回答 2

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

这将使用均值和标准差向量中的每个值依次绘制 365 个随机正态s1偏差s2

于 2013-07-17T15:09:12.490 回答
0

你只得到一个值的原因是因为{y<-rnorm(...你正在分配一个标量变量y。在下一行中,您尝试获取 的值y[i],该值不会i大于 1。

但是,您根本不需要循环。该rnorm函数是向量化的,这意味着它接受向量作为均值和标准差的参数。所以你可以sim

sim <- rnorm(365, s1, s2)
于 2013-07-17T15:09:45.680 回答