совпадение значений в списке - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть список, например, созданный с помощью этого кода:

lst <- list(c(c(1,2,3)), c(3,4,5))
names(lst) <- c("A","B")

, который выглядит следующим образом:

> lst
$`A`
[1] 1 2 3

$B
[1] 3 4 5

Как я могу сопоставить значение способом, возвращающим true илиfalse для каждого элемента списка?Как я могу затем извлечь имена списков, для которых это правда.Таким образом, в этом примере, если я хочу, чтобы значение соответствовало «2», я хотел бы вернуть

[1] TRUE, FALSE

, а затем я хотел бы вернуть имя списка, где это верно, так:

[1] "A"

Если бы я соответствовал значению 3, я бы хотел:

[1] TRUE, TRUE

и

[1] "A", "B"

Я не могу найти способ добиться этого.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Попробуйте:

lst = list(A = c(c(1,2,3)), B = c(3,4,5))

searchValue = 2
z = sapply(lst, function(x){ searchValue%in%x })

Результаты:

> z
    A     B 
 TRUE FALSE 

> names(z)[z]
[1] "A"
0 голосов
/ 31 декабря 2018

Вы можете сделать:

val = 3
names(lst)[sapply(lst, function(x) val %in% x)]

[1] "A" "B"

Объяснение:

  1. sapply(lst, function(x) val %in% x)): возвращает вектор логических значений
  2. names: получить именав соответствии с логическими значениями
...