Извлечение всех объектов в глобальной среде, которые имеют определенные атрибуты

#r

#r

Вопрос:

Допустим, у меня есть список объектов в глобальной среде. Как бы я извлек только те, которые имеют определенный набор атрибутов?

 x1 <- 1:10
x2 <- 1:10
x3 <- 1:10
x4 <- 1:10
x5 <- 1:10 

attr(x1, "foo") <- "bar"
attr(x5, "foo") <- "bar"
  

Как мне извлечь x1 и x5, основываясь на том факте, что у них есть атрибут «foo» как «bar»?

Ответ №1:

Пара вариантов ответа Рамната.

Для получения нескольких объектов предпочтительнее использовать mget вместо get с lapply .

 all <- mget(ls(), envir = globalenv())
  

Вы можете использовать Filter для фильтрации списка переменных. Я думаю, это немного проясняет замысел кода. (Хотя это делает то же самое под крышкой.)

 Filter(function(x) attr(x, "foo") == "bar", all)
  

Ответ №2:

Вот один из способов сделать это

 # collect all objects in global environment
all = lapply(ls(), get)

# extract objects with attribute = "bar"
bar = all[lapply(all, attr, "foo") == "bar"]