2017-06-05 63 views
0

我有四個向量R:依賴於其他載體優化指數兩比較

x, y, z, w 
length(x) = length(y) = length(z) = length(w) = 5000 

,我要做到以下幾點:

以向量「W」,並通過各指標「運行i'從1到5000.對於每個索引'i',在'x'中找到最接近y [i]的索引'j'。然後,取這個索引'j',並且比較是否對於所有i和j(i)....由j(i),w [i]> z [j],我的意思是j取決於i。

我只想知道如果這是真的,我不想計算相應的is和js。

我已經使用for循環來安裝此過程,並使用which.min來查找索引'j'。這非常慢。如何優化?


例子:

z <- c(1,2,3,4,5) 
w <- c(2,3,2,5,5) 
x <- c(200,300,400,500,600) 
y <- c(300,300,200,500,600) 

因此,基於上述情況,我們有以下5個比較:

w[1] > z[2] (because y[1] is closest to x[2]) 
w[2] > z[2] (because y[2] is closest to x[2]) 
w[3] < z[1] (because y[3] is closest to x[1]) 

注意,現在我們已經知道W [i]爲不大於嚴格比z [j],所以我們可以在這裏停下來。那麼輸出應該是

"FALSE" 

回答

1

我的解決方案計算J的,作出了一個比較。

all(w > z[apply(abs(outer(x, y, `-`)), 2, which.min)]) 

取決於您所需要的快速。在我的機器上,這需要不到一秒的時間才能運行5000 x值的示例。

system.time(
    all(w > z[apply(abs(outer(x, y, `-`)), 2, which.min)])) 
      user   system   elapsed 
0.77000000000000 0.20000000000000 0.97000000000116