【发布时间】:2021-01-02 10:27:31
【问题描述】:
所以目前我遇到了 FOR 和 IF 函数的问题。
我有一个完整的工作代码,如下所示:
#my data input
demand.variation=c(1,4,20,23,37)
demand.probability=c(0.81,0.85,0.89,0.93,0.97)
n.month=25
#generating result matrix
result=matrix(0,n.month,2)
colnames(result)=c("Month","Demand")
#filling result matrix with month index and random demand value
result[,1]=1:n.month
random=runif(n.month,0,1)
#return demand value based on random value
for (i in seq_along(random)) {
if (random[i]>demand.probability[5]) result[i,2]=demand.variation[5]
else if (random[i]>demand.probability[4]) result[i,2]=demand.variation[4]
else if (random[i]>demand.probability[3]) result[i,2]=demand.variation[3]
else if (random[i]>demand.probability[2]) result[i,2]=demand.variation[2]
else if (random[i]>demand.probability[1]) result[i,2]=demand.variation[1]
else result[i,2]=0
}
#final result
result
结果完全可以使用:
> result
Month Demand
[1,] 1 0
[2,] 2 0
[3,] 3 0
[4,] 4 0
[5,] 5 0
[6,] 6 0
[7,] 7 0
[8,] 8 0
[9,] 9 4
[10,] 10 0
[11,] 11 0
[12,] 12 23
[13,] 13 37
[14,] 14 0
[15,] 15 1
[16,] 16 0
[17,] 17 0
[18,] 18 0
[19,] 19 1
[20,] 20 20
[21,] 21 0
[22,] 22 0
[23,] 23 0
[24,] 24 0
[25,] 25 0
问题是,我必须重新运行相同的代码,但 demand.variation 和 demand.probability 的长度和值不同,所以我将面临这两个变量的几十个变化的问题,因为 FOR 和 IF 是手动输入。
我的问题是如何生成灵活的 FOR 和 IF 语句代码来覆盖#return demand value based on random value 代码的工作。
脚注:demand.variation 和 demand.probability 将始终具有相同的向量长度,并相应地相互连接,这意味着 demand.variation 向量中的第一个值有demand.probability 向量中的第一个值的概率,等等
demand.variation=c(1,4,20,23,37)
demand.probability=c(0.81,0.85,0.89,0.93,0.97)
如果您能在这方面帮助我,我将不胜感激。
【问题讨论】:
-
您是否尝试过您之前帖子中的
findInterval答案。这对于任何长度的向量都应该是通用的。 stackoverflow.com/a/65536884 -
嗨,谢谢你帮助我,因为之前的答案似乎已经解决了我的问题,所以我没有尝试过你的建议。我将与其他建议一起尝试,并找出哪个最有效。还是谢谢
标签: r for-loop if-statement