0
larger1temp = wbd663$mbsf[which(wbd663$mbsf > carb663$mbsf[i])]

larger1 = larger1temp[1]

^これが私が今やっている方法ですが、はるかに良い方法があるはずです。iを説明するwhileループです。

基本的に、wbd663$mbsfは深さの配列であり、深さcarb663$mbsfの配列でもあります。wbd663$mbsf与えられた値よりも大きい最小の深さの値を見つけたいですcarb663$mbsf[i]

4

2 に答える 2

4

@Johnに同意します。の代わりにsapply、を使用できますfindInterval。これは非常に高速です。

As <- sort(A)
id <- findInterval(B, A)
As[id+1] # NA if lub does not exist.
于 2012-10-24T08:05:36.687 に答える
3

ベクトルAがあり、ベクトル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、実際には、それはこれ以上速くはありません...とにかく私が見ることができる量より速くはありません)

于 2012-10-24T06:15:29.367 に答える