R按类子设置全局环境中的对象列表

时间:2012-03-05 02:30:41

标签: r class list subset

我希望能够按类对我的全局环境中的对象列表进行子集化。

即。从运行

创建的列表中

ls()

我希望能够创建一个只有属于特定类的对象名称的较短列表,例如xts或POSIXlt

提前致谢

2 个答案:

答案 0 :(得分:3)

这是对上述内容的轻微改动,它使用inherits来检查对象:

objs =  mget(ls(envir=.GlobalEnv), envir=.GlobalEnv)
names(Filter(function(i) inherits(i, "lm"), objs))

函数(i)inherits(i,“lm”)可以根据需要进行调整。

答案 1 :(得分:2)

您可以检索ls()并检查所有内容的类别。但它可能不是特别有效,因为它在 ls()之后过滤而不在其中。

# populate global environment with some vars.
rm(list=ls())
a <- 1
b <- 2
c <- 'foo'
d <- 'asdf'
lst <- ls()
# return everything 'numeric':
lst[sapply(lst,function(var) any(class(get(var))=='numeric'))]
# 'a' 'b'

get(var)获取与var中的字符串对应的变量,因此如果var"a",则get(var)检索1(作为变量的值) a)。

如下面的@VincentZoonekynd所述 - 对象可能有多个类。 Soo class(some_xts_object)c("xts","zoo") - 如果您搜索some_xts_object个对象,上述方法将返回xts,如果您搜索{{>,则 1}}对象。