R表示矩阵中的循环

时间:2013-07-17 14:58:23

标签: r for-loop matrix

我有两个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]}

然而,它只生成第一个值。我该如何修复我的代码? 非常感谢你!

2 个答案:

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

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

答案 1 :(得分:0)

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

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

填充sim向量
sim <- rnorm(365, s1, s2)