使用两个(甚至更多)for循环时存储值

f45qwnt8  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(114)

我正在写一个骰子模拟器,它使用两个for()函数循环。
但是我不能存储输出。下面是我的代码。

dice <- matrix(c(1,2,3,4,5,6),1,6)

sim <- matrix() ; sim_mean <- c() ; sim2 <- c()
for ( N in c(20,50,100) ) {
  
  for ( i in 1:10 ) {
    
  sim <- sample(dice , size = N , replace = TRUE)
  
  print(sim)
  
}
  }

我想做一个矩阵或列表来存储它们,但失败了很多次。
如何存储输出sim

wswtfjt7

wswtfjt71#

你可以使用Base R lapply函数两次,将结果自动存储到 Dataframe 中。见下文。

resample <- function(N, n_resample = 10){
  lapply(1:n_resample, \(x)sample(1:6, size = N, replace = TRUE))
}

repeated_resample <- function(N, n_resample){
  lapply(N, function(x){resample_results(N = x, n_resample = n_resample)})
  }
results <- repeated_resample(N = c(20,50,100), n_resample = 10)
bxgwgixi

bxgwgixi2#

您可以使用lapplysapply代替for将结果存储为列表或矩阵。

sim <- lapply(c(20,50,100), \(N) {
  sapply(1:10, \(i) {
    sample(dice , size = N , replace = TRUE)
  })
})

str(sim)
#List of 3
# $ : num [1:20, 1:10] 2 3 2 2 4 6 4 3 4 5 ...
# $ : num [1:50, 1:10] 3 2 2 3 6 1 4 3 6 3 ...
# $ : num [1:100, 1:10] 4 1 5 3 6 4 2 5 3 5 ...

相关问题