2012-10-24 60 views
0
larger1temp = wbd663$mbsf[which(wbd663$mbsf > carb663$mbsf[i])] 

larger1 = larger1temp[1] 

^這是我現在怎麼做,但必須有更好的辦法。這是一個while循環,解釋我。基本上,wbd663$mbsf是一個深度數組,carb663$mbsf也是深度數組。我想查找wbd663$mbsf中的最小深度值,該值大於給定的carb663$mbsf[i]值。如何找到數組中最小的數字,該數組的數字會立即大於另一個數組中的給定數字?

+1

您如何處理關係? –

+0

大於或等於? – InquilineKea

+1

我的意思是,如果你有幾個具有相同結果的案例,你會怎麼做。隨機挑選一個,還是應該滿足其他標準? –

回答

2

比方說,我有一個載體,我有向量B的第4項的語法拿到最低的項目比向量B的第4項是更大的...

min(A[A > B[4]) 

但我有點有關你的問題應該真的詳細闡述,因爲你已經有一個循環的B的索引。你真的想要這些最低限度的每一個?

在這種情況下,你可以使用

sapply(B, function(x) min(A[A>x])) 

如果這原來是有點慢,你可以可能是通過預分類和使用直接索引加快速度。這是一個簡單的版本。

As <- sort(A) 
sapply(B, function(x) As[As>x][1]) 

(OK,其實,這不是任何更快......不是量更快,我可以看到反正)

3

我@約翰同意。作爲sapply的替代方案,您可以使用findInterval,這是非常快的

As <- sort(A) 
id <- findInterval(B, A) 
As[id+1] # NA if lub does not exist. 
+0

啊,是的,我試圖記住那個命令。如果他們真的想要所有的值,問題者應該選擇這個作爲最好的答案。但是,我將我的觀點作爲一個概括,直接回答了所問的內容。 – John

相關問題