簡體   English   中英

如何在R中向量化復雜的迭代循環

[英]How to vectorize complex iterative loop in r

我通常對r中的向量化沒有任何問題,但是在下面的示例中,我遇到了一段艱難的時期,因為在for循環中同時存在迭代和非迭代組件。

在下面的代碼中,我必須根據一組常數(Dini)(值的向量(Xs))執行計算,其中輸出向量(Ys)的第i個值也取決於i-1值:

Dini=128 #constant
Xs=c(6.015, 5.996, 5.989, 5.911, 5.851, 5.851, 5.858, 5.851)
Y0=125.73251 #starting Y value

Ys=c(Y0) #starting of output vector, first value is known
for (Vi in Xs[2:length(Xs)]){
  ytm1=Ys[length(Ys)]
  y=(955.74301-2*((Dini+ytm1-Vi)^2-ytm1^2)^0.5+2*ytm1*acos(ytm1/(Dini+ytm1-Vi)))/pi/2
  Ys=c(Ys, y)
} 
df=data.frame(Xs, Ys)
df

    Xs       Ys
1 6.015 125.7325
2 5.996 125.7273
3 5.989 125.7251
4 5.911 125.7036
5 5.851 125.6859
6 5.851 125.6849
7 5.858 125.6868
8 5.851 125.6850

對於這種情況,在for循環中同時包含迭代和非迭代組件的情況下,我的想法陷入了非矢量化的困境。

有什么建議么?

在這種情況下,您可能需要研究使用Reduce 例如

Ys<-Reduce(function(prev, cur) { 
  (955.74301-2*((Dini+prev-cur)^2-prev^2)^0.5 + 2*prev*acos(prev/(Dini+prev-cur)))/pi/2
}, Xs, init=Y0, accumulate=T)[-1]

?Reduce幫助頁面上:“ Reduce使用二進制函數來連續組合給定向量和可能給定的初始值的元素。” 這樣可以更輕松地創建給定值取決於先前值的向量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM