2017-06-05 60 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