【发布时间】:2011-05-03 03:59:05
【问题描述】:
假设我有一个全局环境中的对象列表。我将如何只提取具有特定属性集的那些?
x1 <- 1:10
x2 <- 1:10
x3 <- 1:10
x4 <- 1:10
x5 <- 1:10
attr(x1, "foo") <- "bar"
attr(x5, "foo") <- "bar"
如何根据 x1 和 x5 的属性“foo”作为“bar”来拉取它们?
【问题讨论】:
标签: r
假设我有一个全局环境中的对象列表。我将如何只提取具有特定属性集的那些?
x1 <- 1:10
x2 <- 1:10
x3 <- 1:10
x4 <- 1:10
x5 <- 1:10
attr(x1, "foo") <- "bar"
attr(x5, "foo") <- "bar"
如何根据 x1 和 x5 的属性“foo”作为“bar”来拉取它们?
【问题讨论】:
标签: r
Ramnath 回答的几个变体。
为了获取多个对象,最好使用mget 而不是get 和lapply。
all <- mget(ls(), envir = globalenv())
您可以使用Filter 过滤变量列表。我认为这使代码的意图更加清晰。 (虽然它在引擎盖下做同样的事情。)
Filter(function(x) attr(x, "foo") == "bar", all)
【讨论】:
这是一种方法
# collect all objects in global environment
all = lapply(ls(), get)
# extract objects with attribute = "bar"
bar = all[lapply(all, attr, "foo") == "bar"]
【讨论】: