【问题标题】:R for loop in matrixR for 矩阵中的循环
【发布时间】: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]}

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

【问题讨论】:

  • 您好,由于您在这里比较新,您可能想阅读aboutfaq 了解 SO 的工作原理。如果当您收到解决问题的答案时,您可以通过单击小复选标记或投票一个有用的答案来接受它,那么 StackOverflow 对每个人都会变得更有价值。您绝对没有义务这样做,但如果答案确实解决了您的问题,这是“回馈”网站的好方法。谢谢!

标签: r for-loop matrix


【解决方案1】:

不需要循环。 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 个随机正态偏差。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 这是否意味着如果我将 y 设为矩阵,我的代码应该可以工作?我怎样才能在循环中做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多