larger1temp = wbd663$mbsf[which(wbd663$mbsf > carb663$mbsf[i])]
larger1 = larger1temp[1]
^这就是我现在的做法,但一定有更好的方法。这是一个while循环,解释i。
基本上,wbd663$mbsf
是一个深度数组,carb663$mbsf
也是一个深度数组。我想找到wbd663$mbsf
大于给定值的最小深度carb663$mbsf[i]
值。
larger1temp = wbd663$mbsf[which(wbd663$mbsf > carb663$mbsf[i])]
larger1 = larger1temp[1]
^这就是我现在的做法,但一定有更好的方法。这是一个while循环,解释i。
基本上,wbd663$mbsf
是一个深度数组,carb663$mbsf
也是一个深度数组。我想找到wbd663$mbsf
大于给定值的最小深度carb663$mbsf[i]
值。
我同意@John。作为替代sapply
,你可以使用findInterval
,它真的很快
As <- sort(A)
id <- findInterval(B, A)
As[id+1] # NA if lub does not exist.
假设我有向量 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] )
(好吧,实际上,这并没有更快......无论如何我都看不到更快)