在循环中使用复制
Using replicate over for loop
我想模拟10000次负载和需求之间的差异。我需要所有模拟中负差异的比例。我在下面使用了 for 循环,但这对于大型模拟来说性能不佳,因为它需要我稍后手动计算所有内容。
如何对复制进行同样的操作?使用 replicate over for 循环有什么好处?
for(i in 1:10){
load<-rnorm(10,8,2)
demand<-c(6,7,6,5,6,7,8,7,6,5)
diff<-load-demand
res<-sum(diff<0) / 10# sum the negative differences
print(res)
}
使用 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()
函数不是必需的(一个代码块 returns 它执行的最后一行),但我添加它以便您立即看到将要存储在 [=16= 中的内容].
但您实际上不需要循环来执行此操作(前提是您准确描述了您想要的内容)。您可以只使用矢量化和回收来做到这一点:
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
replicate
或 for
循环实际上只有在您想保留每次模拟的结果时才有意义。由于您只对整体结果感兴趣,因此第二个代码块的性能会更高并且更像 R。
我想模拟10000次负载和需求之间的差异。我需要所有模拟中负差异的比例。我在下面使用了 for 循环,但这对于大型模拟来说性能不佳,因为它需要我稍后手动计算所有内容。
如何对复制进行同样的操作?使用 replicate over for 循环有什么好处?
for(i in 1:10){
load<-rnorm(10,8,2)
demand<-c(6,7,6,5,6,7,8,7,6,5)
diff<-load-demand
res<-sum(diff<0) / 10# sum the negative differences
print(res)
}
使用 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()
函数不是必需的(一个代码块 returns 它执行的最后一行),但我添加它以便您立即看到将要存储在 [=16= 中的内容].
但您实际上不需要循环来执行此操作(前提是您准确描述了您想要的内容)。您可以只使用矢量化和回收来做到这一点:
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
replicate
或 for
循环实际上只有在您想保留每次模拟的结果时才有意义。由于您只对整体结果感兴趣,因此第二个代码块的性能会更高并且更像 R。