我有两个 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]}
但是它只产生第一个值。我应该如何修复我的代码?非常感谢!
不需要循环。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
。
你只得到一个值的原因是因为{y<-rnorm(...
你正在分配一个标量变量y
。在下一行中,您尝试获取 的值y[i]
,该值不会i
大于 1。
但是,您根本不需要循环。该rnorm
函数是向量化的,这意味着它接受向量作为均值和标准差的参数。所以你可以sim
用
sim <- rnorm(365, s1, s2)