我有两个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]}
然而,它只生成第一个值。我该如何修复我的代码? 非常感谢你!
答案 0 :(得分: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
.
.
.
这将依次使用平均值和标准差向量s1
和s2
中的每个值绘制365个随机正态偏差。
答案 1 :(得分:0)
您只获得一个值的原因是因为在{y<-rnorm(...
中,您正在分配标量变量y
。在下一行中,您尝试获取y[i]
的值,i
大于1时将不存在该值。
但是,你根本不需要循环。 rnorm
函数是矢量化的,这意味着它接受向量作为均值和标准差的参数。因此,您可以使用
sim
向量
sim <- rnorm(365, s1, s2)