我们说我有一个向量 Y 。如果我想知道 Y 大于4的位置,我可以使用类似which(Y>4)
的东西,函数Position
等等。但是,现在我有一个向量< em> X 我想为 X 的每个元素 x 获取一个元素为which(Y>x)
的向量。我可以通过循环来做到这一点,但是对于大型向量 X 我想要应用它,这是非常低效的。
什么是实现我想要的更有效,矢量化的方式?
答案 0 :(得分:0)
您可以使用outer
包中的base
功能:
如果您需要满足Y > X[i]
的所有索引的列表:
## Test data:
Y <- c(3,6,7,2,9,6,12,5,2,8)
X <- c(4,6,8)
indicesList <- apply(X = outer(Y, X, '>'), MARGIN = 2, FUN = which)
> indicesList
[[1]]
[1] 2 3 5 6 7 8 10
[[2]]
[1] 3 5 7 10
[[3]]
[1] 5 7
如果您只想在Y
中找到满足Y > X[i]
的第一个元素:
firstIndicesVec <- apply(X = outer(Y, X, '>'), MARGIN = 2, FUN = function(x) min(which(x)))
> firstIndicesVec
[1] 2 3 5