Вытащить все объекты в глобальной среде, которые имеют определенные атрибуты - PullRequest
4 голосов
/ 03 мая 2011

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

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"?

Ответы [ 2 ]

5 голосов
/ 03 мая 2011

Несколько вариантов ответа Рамната.

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

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

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

Filter(function(x) attr(x, "foo") == "bar", all)
5 голосов
/ 03 мая 2011

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

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

# extract objects with attribute = "bar"
bar = all[lapply(all, attr, "foo") == "bar"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...