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?
假設我在全局環境中有一個對象列表。我將如何只拉那些具有特定屬性集的東西?拉動全局環境中具有特定屬性的所有對象
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?
這裏是一個辦法做到這一點
# collect all objects in global environment
all = lapply(ls(), get)
# extract objects with attribute = "bar"
bar = all[lapply(all, attr, "foo") == "bar"]
上Ramnath的答案一對夫婦的變化。
爲了得到多個對象,它是優選使用mget
代替get
與lapply
。
all <- mget(ls(), envir = globalenv())
您可以使用Filter
來篩選變量列表。我認爲這會使代碼的意圖更加清晰。 (雖然它在發動機罩下面做了同樣的事情)。
Filter(function(x) attr(x, "foo") == "bar", all)
Thanks Ramnath :) – 2011-05-03 04:40:07