首页 > 解决方案 > 执行模拟时如何指定结果的存储位置?

问题描述

我目前正在执行下面的模拟。我做过一次,希望能重复 100 次。但是,在 100 次模拟中,我得到的结果与第 100 次相同。我很难知道 for 循环结果的存储位置或方式。我是 R 中的一个大人物,所以完全不知道我下面的代码有什么问题。

#### Repeating the simulation for 100 times
nsims= 100
incomes_priv = matrix(NA, 36, nsims)# store priv income results
incomes_pub=matrix(NA,36, nsims)#to store pub income results
savings_priv= matrix(NA, 36, nsims)#to store savings from priv
savings_public=matrix(NA,36 ,nsims)#to store savings from pub

set.seed(500)

for (j in 1:nsims){{
  print(j)

  for(i in 1:36){incomes_pub100= rnorm(36 ,29200, 10000)
  income_priv100=rnorm(36,25500, 17000)
    saved_pub100=prop.saved *income_pub100
    saved_pri100=prop.saved *income_priv100}


  incomes_pri <- incomes_priv100
  incomes_pub<- income_pub100
  savings_priv <- saved_pri100
  savings_pub<- saved_pub100
}  

标签: rsimulation

解决方案


您没有在这些矩阵中索引您希望存储结果的位置,因此您每次都在覆盖它们。尝试:

#### Repeating the simulation for 100 times
nsims          = 100
incomes_priv   = matrix(NA, 36, nsims)  # store priv income results
incomes_pub    = matrix(NA, 36, nsims)  # to store pub income results
savings_priv   = matrix(NA, 36, nsims)  # to store savings from priv
savings_pub    = matrix(NA, 36, nsims)  # to store savings from pub
prop.saved     = .1

set.seed(500)

for(j in 1:nsims){
  print(j)

  for(i in 1:36){
    income_pub100  = rnorm(1, 29200, 10000) 
    income_priv100 = rnorm(1, 25500, 17000)
    saved_pub100   = prop.saved *income_pub100
    saved_pri100   = prop.saved *income_priv100

    incomes_priv[i,j] <- income_priv100
    incomes_pub[i,j]  <- income_pub100
    savings_priv[i,j] <- saved_pri100
    savings_pub[i,j]  <- saved_pub100
  }
}  

关键是我添加[i,j]了指示结果应该存储在每个矩阵中的哪个位置。这样,您不会在每次通过循环时覆盖矩阵。(我还清理了很多代码,例如不匹配的大括号,并使代码在视觉上更好地排序。)


推荐阅读