我想矢量化(apply
) a which
矩阵运算X
如下图所示for
循环的结果是向量ind
:
X = matrix( 1:20, 4, 5 )
V = sample( 1:20, 4 )
ind = numeric()
for( i in 1:nrow(X) ) ind[i] = max( c(0, which(X[i,] < V[i]) ))
该操作返回于ind
对于每一行X
具有小于所指示的值的最高值的元素的索引X
-行对应元素V
.
操作max
将所有符合条件的索引的向量映射到标量。或者,我会对返回的操作感到满意,例如Alist
所有索引(我可以lapply
max
).
如果你的矩阵的值不断增加,就像你分享的例子一样(我当然对此表示怀疑),但如果是这样,你可以简单地这样做,
rowSums(X < V)
#[1] 4 3 4 0
然而,如果情况并非如此,那么一个简单的apply
就足够了,即
apply(X < V, 1, function(i)max(which(i)))
#[1] 4 3 4 -Inf
请记住,所有数学运算都是向量化的,所以<
被矢量化
您可以更换-Inf
像往常一样
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)