如何将这个 for 循环转换为 apply 函数?
How to convert this for loop into an apply function?
我对 R 很陌生,目前正在研究我在网上找到的一个 Monte Carlo 模拟示例,但是它是在 for 循环中给出的。我想摆脱这些,但正在努力将其转换为应用功能。任何帮助将不胜感激:
for (k in 1:1000)
{
rolls = runif(1,3000,5000)
bags = runif(1,2000,4000)
cases = runif(1,150,200)*30
total = min (rolls, bags, cases)
results = rbind(results, data.frame(rolls, bags, cases, total))
}
您不需要 for
循环,也不需要任何 apply
函数。
runif
可以一次性生成多个n
号。要获得行最小值,您可以使用 pmin
.
n <- 1000
rolls = runif(n,3000,5000)
bags = runif(n,2000,4000)
cases = runif(n,150,200)*30
total = pmin(rolls, bags, cases)
results <- data.frame(rolls, bags, cases, total)
正如@Roland 指出的一般情况,在这种情况下您无法对模拟进行矢量化,您可以使用 replicate
函数。
simulation <- function() {
rolls = runif(1,3000,5000)
bags = runif(1,2000,4000)
cases = runif(1,150,200)*30
total = min(rolls, bags, cases)
data.frame(rolls, bags, cases, total)
}
results <- t(replicate(1000, simulation(), simplify = TRUE))
我对 R 很陌生,目前正在研究我在网上找到的一个 Monte Carlo 模拟示例,但是它是在 for 循环中给出的。我想摆脱这些,但正在努力将其转换为应用功能。任何帮助将不胜感激:
for (k in 1:1000)
{
rolls = runif(1,3000,5000)
bags = runif(1,2000,4000)
cases = runif(1,150,200)*30
total = min (rolls, bags, cases)
results = rbind(results, data.frame(rolls, bags, cases, total))
}
您不需要 for
循环,也不需要任何 apply
函数。
runif
可以一次性生成多个n
号。要获得行最小值,您可以使用 pmin
.
n <- 1000
rolls = runif(n,3000,5000)
bags = runif(n,2000,4000)
cases = runif(n,150,200)*30
total = pmin(rolls, bags, cases)
results <- data.frame(rolls, bags, cases, total)
正如@Roland 指出的一般情况,在这种情况下您无法对模拟进行矢量化,您可以使用 replicate
函数。
simulation <- function() {
rolls = runif(1,3000,5000)
bags = runif(1,2000,4000)
cases = runif(1,150,200)*30
total = min(rolls, bags, cases)
data.frame(rolls, bags, cases, total)
}
results <- t(replicate(1000, simulation(), simplify = TRUE))