Попробуйте:
which( !is.na(p), arr.ind=TRUE)
То, что я считаю столь же информативным и, вероятно, более полезным, чем указанный вами вывод, но если вы действительно хотите использовать версию списка, то это можно использовать:
> apply(p, 1, function(x) which(!is.na(x)) )
[[1]]
[1] 2 3
[[2]]
[1] 4 7
[[3]]
integer(0)
[[4]]
[1] 5
[[5]]
integer(0)
Или даже со смазкой вместе с пастой:
lapply(apply(p, 1, function(x) which(!is.na(x)) ) , paste, collapse=", ")
Выходные данные из функции which
предложенного метода доставляют строку и столбец ненулевых (ИСТИНА) местоположений логических тестов:
> which( !is.na(p), arr.ind=TRUE)
row col
[1,] 1 2
[2,] 1 3
[3,] 2 4
[4,] 4 5
[5,] 2 7
Если для параметра arr.ind
не установлено значение ИСТИНА по умолчанию, вы получите только «векторное местоположение», определенное с использованием мажорного столбца, упорядоченного по R в качестве соглашения. R-матрицы являются просто «сложенными векторами».
> which( !is.na(p) )
[1] 6 11 17 24 32