使用replicate over for循环

时间:2016-02-17 09:01:35

标签: r for-loop replicate

我想对负载和需求之间的差异进行10000次模拟。我需要所有模拟的负差异比例。我在下面使用了for循环,但这对于大型模拟来说并不适用,因为它需要我稍后手动计算所有内容。

我如何对复制做同样的事情?使用replicate over for循环有什么好处?

li:not(.es):hover {
  background-color: #fff;
  color: #878787;
}
.es {
  background-color: red;
  color: white;
}

// script

$('li').on('click', function() {
  $('li').removeClass("es");
  $(this).addClass("es");
  var selectedEmpId = $(this).attr("eI");
});

1 个答案:

答案 0 :(得分:1)

使用for循环的一大缺点是,您不会自动将所有内容存储在对象中。 replicate()为你做到了。

另一个提示:保留所有不会改变的内容(如demand的定义)

如何使用replicate()

执行您所描述的内容
nsim <- 10000
demand <- c(6,7,6,5,6,7,8,7,6,5)
res <- replicate(nsim,{
  load <- rnorm(10,8,2)
  diff <- load - demand
  return(sum(diff < 0))
})
res <- sum(res) / nsim

return()函数不是必需的(代码块返回它执行的最后一行),但我添加它以便您立即看到将在res中存储的内容。

但实际上你不需要循环来做这件事(假设你准确地描述了你想要的东西)。您可以使用矢量化和回收来执行此操作:

nsim <- 10000
demand <- c(6,7,6,5,6,7,8,7,6,5)
load <- rnorm(10*nsim, 8, 2)
diff <- load - demand
res <- sum(diff < 0) / nsim

replicatefor循环实际上只有在您希望保留每个模拟的结果时才有意义。由于您只对整体结果感兴趣,因此第二个代码块将更具性能和R-like。