R:使用相互依赖的值向量化循环

时间:2015-01-29 14:02:59

标签: r for-loop recursion vector

我在R中模拟一个仓库,其中供应(o.in)到达随机提前期并且需求(d)被提供。库存水平(stockHistory)是根据供需之间的差异计算的。

for(i in 1:periods){

  stockHistory[i] = stockHistory[i] - d[i] + o.in[i] # o.in has been determined in previous looping, d is known before loop
  openOrders = openOrders - o.in[i]

  missing_packages = ceiling((reorderPoint - stockHistory[i] - openOrders)/q) # stockHistory + openOrders are based on o.in and calculated in loop

  if (missing_packages > 0 ) {
    openOrders = openOrders + missing_packages * q
    o.in[leadtimes[i]+i] = o.in[leadtimes[i]+i] + missing_packages * q # leadtimes is known before looping
  }
}

如何通过矢量化避免 for loop ?我的问题是我不知道如何处理

o.in[leadtimes[i]+i] = o.in[leadtimes[i]+i] + missing_packages * q
以矢量化的方式

,以便在计算中按元素计算向量中的偏移 leadtimes [i] + i 。我检查了diff(),但它似乎不适合我的用例。

第二个问题是我无法确定操作的正确顺序,因为它们是基于彼此的。

任何帮助都将受到高度赞赏。提前谢谢!

1 个答案:

答案 0 :(得分:1)

好吧,让我们逐行看一下。例如:

 stockHistory[i] = stockHistory[i] - d[i] + o.in[i] 

由于没有"历史依赖,"写一下

stockHistory <- stockHistory -d +o.in 

  openOrders = openOrders - o.in[i]

在这里,将openOrders设为与其他所有内容相同长度的矢量。

openOrders <- -o.in # and later modify each i-th element in some way

您与missing_packages的问题在于,您似乎并没有将其作为与您的第i个时间段对齐的值向量。当您更好地定义您的情况时,我可以建议进一步的矢量化代码。我将指出您当前的设置是天真的,因为添加零不会改变值:-)。要点:

if ( foo > 0 )  bar <- bar + 5*foo

是浪费精力。 bar<-bar + 5*foo完全相同,foo是否为零。