假设我在全球环境中有一个对象列表。我如何仅提取具有特定属性集的那些?
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?
答案 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)