Если вы хотите сделать это по строкам матрицы, вы можете использовать apply и указать, где в каждой строке находится число, равное желаемому (43 в вашем примере).Код выглядит следующим образом:
equal.43 = apply(mat==43,1,which)
Это даст вам список, где каждый элемент в списке соответствует каждой строке матрицы, и внутри этих элементов у вас будет номер столбца, который содержит значение.Например, представьте, что ваша матрица выглядит следующим образом:
[,1] [,2] [,3] [,4]
[1,] 3 5 10 10
[2,] 7 5 6 10
[3,] 10 7 5 5
[4,] 6 8 10 9
[5,] 2 5 7 10
Затем вы запускаете команду:
where.is.7 = apply(x==7,1,which)
Если вы проверите где .is.7, вы увидите:
[[1]]
integer(0)
[[2]]
[1] 1
[[3]]
[1] 2
[[4]]
integer(0)
[[5]]
[1] 3
То есть 1-й ряд не имеет 7, 2-й ряд в 1-м столбце и т. Д.Оттуда вы можете перебрать список, чтобы определить, каких «соседей» вы хотите.Кроме того, перед циклом вы должны удалить любое значение столбца, что приведет к ошибке индексации за пределами границ.Например,
where.is.7 = lapply(where.is.7,function(x) x[x<4])
followers = c()
for(i in 1:5){
if(length(where.is.7[[i]])>0){
followers = cbind(followers,x[i,where.is.7[[i]]+1])
}
}