拉动全局环境中具有特定属性的所有对象

时间:2011-05-03 03:59:05

标签: r

假设我在全球环境中有一个对象列表。我如何仅提取具有特定属性集的那些?

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

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

如何基于他们将属性“foo”作为“bar”的事实来拉x1和x5?

2 个答案:

答案 0 :(得分:5)

这是一种方法

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

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

答案 1 :(得分:5)

Ramnath答案的几个变种。

要获取多个对象,最好使用mget代替get lapply

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

您可以使用Filter过滤变量列表。我认为这使得代码的意图更加清晰。 (虽然它在发动机罩下面做同样的事情。)

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