2011-05-03 40 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) 
相關問題