我需要模拟然后总结10年的利润,而第一年会有额外的支出;我还需要针对几个具有不同产能的工厂看到这一点。我认为嵌套的for循环将是完成此工作的最简单方法。
我要遍历的工厂的产能:
Cap = c(30000, 35000, 40000, 45000, 50000, 55000, 60000)
如果我手动选择其中一种容量,并且仅将其中一种用于循环:
i = 60000
D = rnorm(n=1, mean=50000, sd=12000)
Pr1 = min(D, i)*UnitProf - i*OpCost - i*BuildCost
for (j in 1:9) {
D = rnorm(n=1, mean=50000, sd=12000)
Pr2[j] = min(D, i)*UnitProf - i*OpCost
}
Profit = sum(c(Pr1, Pr2))
Profit
我获得了全部10年利润的单笔金额(例如619775.10
),正是我想要的。
但是当我尝试使用嵌套的for循环遍历每个容量时,例如:
Cap = c(30000, 35000, 40000, 45000, 50000, 55000, 60000)
for (i in Cap) {
D = rnorm(n=1, mean=50000, sd=12000)
Pr1 = min(D, i)*UnitProf - i*OpCost - i*BuildCost
for (j in 1:9) {
D = rnorm(n=1, mean=50000, sd=12000)
Pr2[j] = min(D, i)*UnitProf - i*OpCost
}
Profit[i] = sum(c(Pr1, Pr2))
}
Profit
我得到619775.10 NA NA NA NA NA NA NA NA …
,它重复了数千次。
我想返回的是一个包含7个元素的向量。要素是10年的利润之和,每个工厂一个利润。
答案 0 :(得分:1)
将代码放入函数中。然后使用一些apply
族函数来迭代您的能力向量:
Fprofit = function(i){
D = rnorm(n=1, mean=50000, sd=12000)
Pr1 = min(D, i)*UnitProf - i*OpCost - i*BuildCost
Pr2=c() #Empty
for (j in 1:9) {
D = rnorm(n=1, mean=50000, sd=12000)
Pr2[j] = min(D, i)*UnitProf - i*OpCost
}
Profit = sum(c(Pr1, Pr2))
Profit}
Fprofit(60000)
Cap = c(30000, 35000, 40000, 45000, 50000, 55000, 60000)
set.seed(1234) # for being reproducible
sapply(Cap,Fprofit)
#[1] 577403.3 692650.0 769812.6 767271.6 808360.8 859919.7 1046818.9
# assuming UnitProf=2 OpCost=.02 BuildCost=0.01
编辑:
更改将功能Profit = sum(c(Pr1, Pr2))
替换为Profit = c(Pr1, Pr2,sum(Pr1,Pr2))
的功能,您将获得完整的仿真表。