2014-03-28 45 views
0

我有一個矩陣,該矩陣的第1行看起來像找到在矩陣線相似的元件中的R

[1] 3.630380e-04 2.508100e-04 2.397480e-04 3.583060e-04 1.352502e-03 
    [6] 3.615660e-04 1.070212e-04 1.851614e-03 4.862520e-04 3.133680e-05 
[11] 1.509084e-03 1.971120e-04 9.395720e-05 2.467100e-03 3.695440e-05 
[16] 4.840520e-04 9.587220e-05 3.482520e-03 2.580140e-04 4.161880e-03 
[21] 1.826980e-04 3.016000e-03 3.177400e-03 1.281218e-04 8.437420e-04 
[26] 1.823138e-03 9.580200e-04 9.907120e-04 2.582140e-03 2.205160e-04 
[31] 6.575000e-05 1.875756e-03 3.671640e-04 2.528060e-05 4.163980e-04 
[36] 7.939280e-04 2.894380e-04 2.474960e-04 2.101340e-04 2.241000e-03 
[41] 1.254614e-04 5.975560e-04 7.159760e-05 3.125960e-04 1.311358e-03 
[46] 4.742180e-04 7.947780e-07 2.819960e-04 5.153660e-04 4.901420e-04 
[51] 2.108020e-03 1.122480e-03 6.398160e-04 8.454800e-04 3.870840e-05 
[56] 4.835640e-04 1.311954e-03 6.320340e-06 3.058540e-03 5.186800e-04 

我想在我列(其中,i是用於該特定行的列29),以開始和向右和向左移動,並檢測該值保留在第29列的值的10e-4內。因此,我不想舍入任何數字,只是爲了評估差異。如果容差保持欄29和col 30和col 29和col 28之間則算法繼續進行shoudl從COL 29以檢查對col 27和col 29對col 31.

由於

回答

0

此發現的位置的第一個值在公差範圍之外:

x <- c(3.630380e-04,2.508100e-04,2.397480e-04,3.583060e-04,1.352502e-03, 
3.615660e-04,1.070212e-04,1.851614e-03,4.862520e-04,3.133680e-05, 
1.509084e-03,1.971120e-04,9.395720e-05,2.467100e-03,3.695440e-05, 
4.840520e-04,9.587220e-05,3.482520e-03,2.580140e-04,4.161880e-03, 
1.826980e-04,3.016000e-03,3.177400e-03,1.281218e-04,8.437420e-04, 
1.823138e-03,9.580200e-04,9.907120e-04,2.582140e-03,2.205160e-04, 
6.575000e-05,1.875756e-03,3.671640e-04,2.528060e-05,4.163980e-04, 
7.939280e-04,2.894380e-04,2.474960e-04,2.101340e-04,2.241000e-03, 
1.254614e-04,5.975560e-04,7.159760e-05,3.125960e-04,1.311358e-03, 
4.742180e-04,7.947780e-07,2.819960e-04,5.153660e-04,4.901420e-04, 
2.108020e-03,1.122480e-03,6.398160e-04,8.454800e-04,3.870840e-05, 
4.835640e-04,1.311954e-03,6.320340e-06,3.058540e-03,5.186800e-04) 

search.fun <- function(x, i, tol) { 
    test <- (x - x[i]) > tol 
    a <- head(test, i) 
    lwr <- if (any(a)) i - which.max(rev(a)) + 1 else -Inf 
    b <- tail(test, -i) 
    upr <- if (any(b)) i + which.max(b) else Inf 
    setNames(c(lwr, upr), c("lwr", "upr")) 
    } 

search.fun(x, 29, 5e-5) 
#lwr upr 
#23 59 

這裏我假定RAM不是問題。另外,如果向量很大,並且期望的間隔非常小,則使用for循環可能會更有效。

根據需要調整(不要說你想要返回的東西)。

+0

您是否可能會整合一個案例,當搜索要打到行的最後一列或第一列時會發生什麼?所以如果該值在行中所有值的容差範圍內? – user3419669

+0

此外,如果數值處於容差範圍內,會發生什麼情況,超出了容差範圍,然後再次出現?計數將需要停止第一次它是不容忍的.....但你採取最大..或我誤解? – user3419669

+0

關於您的第一條評論:這不是一個代碼生成服務。你需要自己做一些工作。不過,我已經實現了對這些情況的處理。關於你的第二個評論:是的,你誤解了。 'which.max'找到第一個'TRUE'值。看看'which.max(c(F,T,F,T))'。 – Roland