2011-05-03 51 views
4

假设我在全局环境中有一个对象列表。我将如何只拉那些具有特定属性集的东西?拉动全局环境中具有特定属性的所有对象

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?

回答

5

这里是一个办法做到这一点

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

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

Thanks Ramnath :) – 2011-05-03 04:40:07

4

上Ramnath的答案一对夫妇的变化。

为了得到多个对象,它是优选使用mget代替getlapply

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

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

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