【问题标题】:R Loop random normal distributionR循环随机正态分布
【发布时间】:2020-09-21 13:10:04
【问题描述】:

我正在尝试实现以下目标:我想从正态分布中生成 7 个值。然后我想取这些值,并使用它们作为平均值从正态分布中生成另外 3 个(对于每个初始值)值来替换它们。我想循环写这个。

让我们使用 sd = 1.5 和 sd = 0.7,并从平均值 0 开始。

set.seed(1234)

mu.mat<-rnorm(7,mean=0,sd=1.5)

给了我 7 个不错的价值观。

然后我想创建一个生成 3 范数的数字 num [1:21]。区值使用刚刚创建的列表的 mean = 第一个值sd = 0.7,另外三个使用第二个值,依此类推。 形式:

rnorm(3,mean=mu.mat[1],sd=0.7)

仅适用于循环中的所有条目。

我尝试过的:

mu.mat2<-NULL
for(i in 1:7) {
  mu.mat2[i]<-rnorm(3,mean=mu.mat[i],sd=0.7)
}

导致错误:否。要替换的项目数不是替换长度的倍数

非常感谢任何有关如何将其放入循环的帮助。提前致谢!

【问题讨论】:

  • sapply(mu.mat, function(mui) rnorm(3, mean=mui, sd=0.7))
  • 或简称sapply(mu.mat, rnorm, n=3, sd=0.7)

标签: r loops normal-distribution


【解决方案1】:

您不需要循环。你可以这样做:

rnorm(21, mean = rep(mu.mat, each = 3), sd = 0.7)
#>  [1] -0.4811184 -1.2327778 -1.8603816 -3.3073277 -2.5190560 -3.2298056
#>  [7] -2.3695570 -2.0228732 -1.1692489  2.0342910  1.0186855  1.0838678
#> [13]  0.5486730 -0.2439510 -0.1831147  2.2026024  0.1925301 -0.2153864
#> [19]  2.8944894  1.9213206  1.3804706

但是您的代码的问题是您试图将三个值 (rnorm(3,mean=mu.mat[i],sd=0.7)) 写入单个原子索引 mu.mat2[i]。目前尚不清楚您是否期望得到一个矩阵,但如果是这样,您的循环将是:

mu.mat2 <- matrix(ncol = 3, nrow = 7)
for(i in 1:7) {
  mu.mat2[i,] <- rnorm(3, mean = mu.mat[i], sd = 0.7)
}

如果您希望结果为 7 x 3 矩阵,您可以这样做:

matrix(rnorm(21, mean = rep(mu.mat, each = 3), sd = 0.7), ncol = 3, byrow = TRUE)
#>             [,1]       [,2]       [,3]
#> [1,] -0.96624036 -1.4808460 -2.6824842
#> [2,] -2.88942108 -1.7299094 -3.0446737
#> [3,] -2.82034688 -0.9570087 -2.1822797
#> [4,]  0.58997289  1.0384926  1.8111506
#> [5,] -0.07705959 -0.1024418  0.7249310
#> [6,]  0.48851487  1.4729882  0.6496858
#> [7,]  1.47961292  1.5653253  2.0629409

【讨论】:

  • 将其转换为 3 列矩阵可能会很有用。
  • 不应该是byrow = TRUE吗? rnorm 调用按顺序输出。
  • 是的@RuiBarradas 我本来打算这样做的,但忘了。谢谢。
  • 哎呀,我的错在那里 - 我想要的结果是列而不是行。
【解决方案2】:

尝试replicate,如下所示

> replicate(3,rnorm(length(mu.mat),mu.mat,0.7))
            [,1]        [,2]       [,3]
[1,] -2.19324092 -1.13895278 -2.1540788
[2,]  0.02102746  0.33894402  0.1077604
[3,]  1.00363528  1.26895511  1.9483744
[4,] -3.85258144 -4.15638335 -4.0041507
[5,] -0.05518348  0.05766686 -0.3700564
[6,]  0.21570611  2.45016846  1.1614128
[7,] -0.81698877 -0.76824819 -1.5786689

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 2023-04-03
    • 2011-03-17
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2011-12-27
    相关资源
    最近更新 更多