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

larger1 = larger1temp[1]

^这就是我现在的做法,但一定有更好的方法。这是一个while循环,解释i。

基本上,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] )

(好吧,实际上,这并没有更快......无论如何我都看不到更快)

于 2012-10-24T06:15:29.367 回答