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