Вы можете отфильтровать список с помощью Filter
:
Filter(function(x) attr(x, "att1") == "b" & attr(x, "att2") == "2", my_list)
Если вы ожидаете, что элемент будет уникальным и хотите его выбрать, добавьте [[1]]
в конце.
Лично я бы положил данные в таблицу:
library(data.table)
myDT = data.table(
att1 = sapply(my_list, attr, "att1"),
att2 = sapply(my_list, attr, "att2"),
data = my_list
)
# att1 att2 data
# 1: a 1 1,2,3,4,5,6,
# 2: b 2 11,12,13,14,15,16,
# 3: c 3 21,22,23,24,25,26,
Затем вы можете проверить, что att1 + att2 однозначно определяет элемент
nrow(myDT) == uniqueN(myDT, by=c("att1", "att2"))
# [1] TRUE
и написать вспомогательную функцию для поднабора
setkey(myDT, att1, att2)
get_element = function(a1, a2) myDT[.(a1, a2), data[[1]]]
get_element("b", "2")
# [1] 11 12 13 14 15 16 17 18 19 20
# attr(,"att1")
# [1] "b"
# attr(,"att2")
# [1] "2"
Возможно, вы также захотите взглянуть на пакеты purrr и broom, которые предлагают различный синтаксис "tidyverse" для таблиц со столбцом списка.