Не уверен, что я правильно понял ваш вопрос, но вы можете использовать tapply, чтобы перейти в каждую строку в матрице, чтобы извлечь нужную информацию.
Сначала я создаю «матрицу группировки» того же размера.как вашЭто служит индексом для группировки каждой строки для подачи в качестве входных данных для вашей лямбда-функции.
matrix(rep(1:10,4),nrow=10,ncol=4)
Затем я запускаю "tapply" для исходной матрицы с матрицей группировки.Это подставляет матрицу так, что каждый вектор строки передается в функцию:
function(x) { return( x[which(x<0)] ) }
, которая просто возвращает все значения, где значение меньше нуля на строку.
> a
[,1] [,2] [,3] [,4]
[1,] 0.5341781 -0.9263866 -0.5380141 -1.2453310
[2,] 0.2931630 1.0490300 0.8127472 0.2473263
[3,] 1.0936143 -0.3399709 1.8199833 1.0053080
[4,] 1.0002433 0.2002659 1.7730118 1.7578414
[5,] 0.8116914 0.9371518 0.8727981 1.4236349
[6,] -0.1127914 1.1563594 1.0331311 0.7658510
[7,] -0.5423493 1.8905533 -0.8121652 0.1355076
[8,] -1.6589310 0.4081290 0.3560005 1.6043205
[9,] 1.8760435 0.8826245 1.4457357 0.7561550
[10,] -0.8503400 0.2302597 0.5838986 0.1252952
> matrix(rep(1:10,4),nrow=10,ncol=4)
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4
[5,] 5 5 5 5
[6,] 6 6 6 6
[7,] 7 7 7 7
[8,] 8 8 8 8
[9,] 9 9 9 9
[10,] 10 10 10 10
> tapply(a, matrix(rep(1:10,4),nrow=10,ncol=4), function(x) { return(x[which(x<0)])})
$`1`
[1] -0.9263866 -0.5380141 -1.2453310
$`2`
numeric(0)
$`3`
[1] -0.3399709
$`4`
numeric(0)
$`5`
numeric(0)
$`6`
[1] -0.1127914
$`7`
[1] -0.5423493 -0.8121652
$`8`
[1] -1.658931
$`9`
numeric(0)
$`10`
[1] -0.85034