我想根据某些变量动态绘制重复的随机样本
n_times
例如:
n_times <- 2
rep(
x = rnorm(3),
times = n_times
)
#> [1] -0.06282421 0.57893598 -0.40280464 -0.06282421 0.57893598 -0.40280464
这里
rep
是先绘制样本,然后重复绘制。我想每次重复时都绘制一个新样本。
在这个极其简单的示例中,我可以将
n_times
填充到 rnorm
中以获得不同的样本:
n_times <- 2
rnorm(n_times * 3)
#> [1] 1.01661877 -1.70475732 -0.01316538 -0.07078134 0.81297461 -0.33472840
但是,我想在列表中重复一系列更复杂的不同样本,动态执行此操作似乎更复杂,例如:
n_times <- 2
rep(
x = list(
a = rnorm(1),
b = rlnorm(3),
d = matrix(
data = runif(4),
nrow = 2
)
),
times = n_times
)
#> $a
#> [1] 0.8858115
#>
#> $b
#> [1] 1.439997 1.455555 4.146259
#>
#> $d
#> [,1] [,2]
#> [1,] 0.6682130 0.9883577
#> [2,] 0.7576468 0.7300474
#>
#> $a
#> [1] 0.8858115
#>
#> $b
#> [1] 1.439997 1.455555 4.146259
#>
#> $d
#> [,1] [,2]
#> [1,] 0.6682130 0.9883577
#> [2,] 0.7576468 0.7300474
理想情况下,
a
、b
和d
的每次迭代都将包含新样本。
虽然在
rep
之外动态创建正确数量的样本很容易,但它动态创建一个列表并将它们拟合到我无法理解的位置。通过循环添加似乎是可能的,但非常尴尬。
创建于 2024 年 10 月 1 日,使用 reprex v2.1.0
好的,非常感谢@Iroha 的评论,我可以通过
replicate
实现所需的行为:
n_times <- 2
internal_fun <- function(){
list(
a = rnorm(1),
b = rlnorm(3),
d = matrix(
data = runif(4),
nrow = 2
)
)
}
replicate(
n = n_times,
expr = internal_fun(),
simplify = FALSE
)
#> [[1]]
#> [[1]]$a
#> [1] -0.6850743
#>
#> [[1]]$b
#> [1] 1.9247365 1.4571854 0.7393512
#>
#> [[1]]$d
#> [,1] [,2]
#> [1,] 0.0165695 0.4036282
#> [2,] 0.1592526 0.5828538
#>
#>
#> [[2]]
#> [[2]]$a
#> [1] 2.087253
#>
#> [[2]]$b
#> [1] 2.502234 6.440260 3.318749
#>
#> [[2]]$d
#> [,1] [,2]
#> [1,] 0.7871132 0.6730501
#> [2,] 0.4739253 0.3097537
创建于 2024 年 10 月 1 日,使用 reprex v2.1.0