Найти индексы элемента в списке, который удовлетворяет условию в R - PullRequest
0 голосов
/ 29 марта 2019

У меня есть список (я назвал его lst) из 150 элементов, некоторые из которых содержат 1:

list(integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), integer(0), integer(0), 
    integer(0), integer(0), integer(0), 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L)

Как извлечь индексы изте элементы, которые содержат 1.Результат будет 139 140 141 142 143 144 145 146 147 148 149 150.

Я пробовал:

unlist(lapply(lst, function(x) if (x == 1) x))

Ответы [ 3 ]

2 голосов
/ 29 марта 2019

Подойдет, @Ронак. логические операторы (т. е. ==) выполняют поиск на первом «уровне» списка, а which возвращает позиции, которые TRUE:

your_list == 1
  [1]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
 [27]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
 [53]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
 [79]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[105]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[131]   NA   NA   NA   NA   NA   NA   NA   NA TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

which(your_list == 1)
 [1] 139 140 141 142 143 144 145 146 147 148 149 150
0 голосов
/ 29 марта 2019

Мы можем использовать setequal.Должно также работать, когда длина вектора больше 1 для каждого list элемента

which(sapply(lst, setequal, 1))
#[1] 139 140 141 142 143 144 145 146 147 148 149 150

или с map из purrr

library(purrr)
which(map_lgl(lst, setequal, 1))
#[1] 139 140 141 142 143 144 145 146 147 148 149 150

или другойопция lengths

which(lengths(lst) == 1)
0 голосов
/ 29 марта 2019

Хитрая часть из-за integer(0) элементов. Мы можем использовать all.equal

which(sapply(lst, all.equal, 1) == TRUE)
#[1] 139 140 141 142 143 144 145 146 147 148 149 150
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...